android - Android 10 (api 29) 中没有这样的文件或目录
问题描述
我正在开发一个照片编辑器应用程序,在编辑我的照片后,我将它保存到我的本地存储中。它在 android 9 之前工作正常,但在 android 10 上没有。它在 Android 10 中显示“未找到此类文件或目录”的异常。经过一些研究,我发现 getExternalFilesDir() 在 android Q+ 中已弃用。但是我在android 10中找不到任何合适的方法。所以,如果有人可以提供教程,那将非常有帮助。
我已经添加并授予使用权限 android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 以防万一这是问题,但它没有解决任何问题。
这是我的尝试(使用 ParcelFileDescriptor):
private void fileAccessForAndroidQ(Uri fileUri){
try {
ParcelFileDescriptor parcelFileDescriptor = this.getContentResolver().openFileDescriptor(fileUri, "r", null);
InputStream inputStream = new FileInputStream(parcelFileDescriptor.getFileDescriptor());
Cursor returnCursor =
getContentResolver().query(fileUri, null, null, null, null);
int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
returnCursor.moveToFirst();
fileName = returnCursor.getString(nameIndex);
file = new File(this.getFilesDir(), fileName);
OutputStream outputStream = new FileOutputStream(file);
IOUtils.copyStream(inputStream, outputStream);
}catch (Exception e){
Toast.makeText(this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
任何形式的帮助将不胜感激。
解决方案
如果您面向 Android 10(API 级别 29)或更高版本,请在应用的清单文件中将 的值设置requestLegacyExternalStorage
为true
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.appname"
android:installLocation="auto">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme.NoActionBar">
<activity android:name=".activities.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
推荐阅读
- java - 某些设备上的字体字符不正确
- c# - 在 ASP.NET Core 3.0 中替换 OkNegotiatedContentResult?
- xml - 字符串末尾的多余空间
- kubernetes - 将 DNS 条目添加到本地 /etc/hosts 以将流量重定向到 PKS Ingress 控制器
- wordpress - CF7 延迟提交直到变量更改
- java - 使用 GraphHopper 在路线上查找点
- java - Spring Boot + Hibernate JPA 配置使用 EntityManager
- scons - 如何使 scons 中的目标依赖于外部命令?
- python - 根据条件修改 Wide Pandas 数据框
- jsf - @Schedule 无法从 @SessionScoped CDI bean 获取数据