问题描述
我使用此代码在 Android 10 之前没有问题。但现在在 Android 11 下它不再起作用。我认为 Whatsapp 无法读取从原始资源创建的 app 目录中的 mp3。
我的技能不是很好,我了解 SAF 或 MediaStore。我认为这就是问题所在,一般来说,WhatsApp 没有权限访问我的应用程序目录。所以我只是不想将它下载到下载/或类似的共享存储路径。但是如何?
目标 SDK 为 30
我的代码:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission"/>
<queries>
<package android:name="com.whatsapp"/>
<package android:name="com.whatsapp.w4b"/>
</queries>
private void shareButton(int shareplayint) {
try {
String mediaPath = copyFiletoExternalStorage(shareplayint);
Intent shareMedia = new Intent();
shareMedia.setAction(Intent.ACTION_SEND);
// Content of mediaPath = /storage/emulated/0/ANdroid/data/stutz.com.swissbuttons/files/swissbuttons.mp3
Toast.makeText(getApplicationContext(),mediaPath,Toast.LENGTH_LONG).show();
shareMedia.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
shareMedia.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
shareMedia.putExtra(Intent.EXTRA_STREAM,Uri.parse(mediaPath));
shareMedia.setType("audio/*");
startActivity(Intent.createChooser(shareMedia,"senden"));
} catch (Exception e) {
Toast.makeText(getApplicationContext(),"Whatsapp isch nit installiert!",Toast.LENGTH_LONG).show();
}
}
private String copyFiletoExternalStorage(int resourceId) {
String pathSDCard = getExternalFilesDir(null) + "/swissbuttons.mp3";
try {
InputStream in = getResources().openRawResource(resourceId);
FileOutputStream out = null;
out = new FileOutputStream(pathSDCard);
byte[] buff = new byte[1024];
int read = 0;
try {
while ((read = in.read(buff)) > 0) {
out.write(buff,read);
}
} finally {
in.close();
out.close();
}
} catch (FileNotFoundException e) {
e.printstacktrace();
} catch (IOException e) {
e.printstacktrace();
}
return pathSDCard;
}
感谢您的帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)