我正在尝试创建文件目录以保存日志文件。由于支持不同的API级别以不同方式访问外部存储,因此我必须编写与每个API级别兼容的代码。这是我的代码。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
// For Android 10 (API level 29) and above
path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();
} else {
// For Android 9 (API level 28) and below
path = Environment.getExternalStorageDirectory().getAbsolutePath();
}
File logsDir = new File(path + "/agent_logs");
if (!logsDir.exists() && !logsDir.mkdirs()) {
throw new RuntimeException("Unable to create directory");
}
这段代码是完美的工作在Android水平10和Android水平10以上的设备.它不适用于Android级别10,API级别29。添加此代码后,甚至应用程序在android 10设备中也无法打开。有什么问题吗?
我也将这些权限添加到AndroidManifest.xml中。
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
<application
android:name=".MainApplication"
android:allowBackup="false"
android:fullBackupContent="false"
android:fullBackupOnly="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
android:largeHeap="true"
android:hardwareAccelerated="false"
tools:targetApi="31"
android:requestLegacyExternalStorage="true"
>
2条答案
按热度按时间jbose2ul1#
将android:requestLegacyExternalStorage=“true”添加到清单文件中的应用程序标记。
j5fpnvbx2#
如果您使用的是Android 11及更高版本,则需要更改读取/写入数据到外部存储的方式。请参阅Android documentation以了解更多信息。请记住新权限
MANAGE_EXTERNAL_STORAGE
和找到的Storage Access Framework
here如果您希望用户自己将数据保存在其他地方,那么我建议使用Intent。沿着如下的东西: