问题描述
我有一个视频录制应用,可以录制并将其保存在外部存储中,特别是应用特定的存储
/storage/emulated/0/Android/data/com.example.xxxx/files
我使用 context.getExternalFilesDir(Environment.DIRECTORY_MOVIES)
将其保存到文件路径 /storage/emulated/0/Android/data/com.example.xxxx/files/Movies
。
读取 context.getExternalFilesDir(Environment.DIRECTORY_MOVIES)
目录中的视频文件有效。我可以打印文件名。但是我无法访问和打开实际文件。我正在使用这个函数来检索视频文件。
public static File getAppSpecificVideoFile(Context context,String fileName) {
// external storage.
File file = new File(context.getExternalFilesDir(
Environment.DIRECTORY_MOVIES),fileName);
return file;
}
所以整个视频路径为 /storage/emulated/0/Android/data/com.example.xxxx/files/Movies/filename.3gp
我已经允许所需的权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
并启用 android:requestLegacyExternalStorage="true"
也用这个方法请求权限
private void requestPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
try {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.addCategory("android.intent.category.DEFAULT");
intent.setData(Uri.parse(String.format("package:%s",getApplicationContext().getPackageName())));
startActivityForResult(intent,2296);
} catch (Exception e) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
startActivityForResult(intent,2296);
}
} else {
//below android 11
ActivityCompat.requestPermissions(this,new String[]{WRITE_EXTERNAL_STORAGE,Manifest.permission.MANAGE_EXTERNAL_STORAGE},2296);
}
}
private boolean checkPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
return Environment.isExternalStorageManager();
} else {
int result = ContextCompat.checkSelfPermission(this,READ_EXTERNAL_STORAGE);
int result1 = ContextCompat.checkSelfPermission(this,WRITE_EXTERNAL_STORAGE);
return result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED;
}
}
编辑
我的问题是使用 Intent Intent.ACTION_VIEW
访问文件。根据文档。
在 Android 11 上,应用无法再访问任何其他应用中的文件 外部存储中的专用应用程序特定目录。
我的解决方案是创建自己的视频播放器,如 ExoPlayer。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)