我正在尝试实现一些清理工具。由于某些“安全原因”,越来越多的制造商禁止使用根设备,禁止不请求解锁
API 28之后,此代码将出错:
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, 1); // Request permission or not, Will got same result
File rootFolder = Environment.getExternalStorageDirectory(); // That is working fine
rootFolder.listFiles(); // That will return null
当然,我可以用这个:
android:requestLegacyExternalStorage="true"
但我相信这将在未来被杀死
那么,有什么优雅的方法来管理SD卡吗
在下面的清单中使用android:requestLegacyExternalStorage=“true”<;应用
在Android 10上
Environment.getExternalStorageDirectory()
和Environment.getExternalStoragePublicDirectory()
将返回存储路径,但路径不可读写对于Android 10,如果将
android:requestLegacyExternalStorage="true"
添加到清单文件中的应用程序标记,则可以继续使用Environment.getExternalStorageDirectory()和Environment.getExternalStoragePublicDirectory()提供的路径。在运行时,您的应用程序可以调用Environment.isExternalStorageLegacy()
来检查请求是否已完成另一种(未知)可能性(仅适用于Android 10)是将
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
添加到清单文件中。 用户必须转到应用程序的高级设置并从Advanced settings Install unknown apps | Allow from this source
启用。 这样做的好处是用户可以切换访问权限。如果您实现了一个Settings.ACTION_APPLICATION_DETAILS_SETTINGS
他可以在那里更改设置。 有趣的是,Environment.isExternalStorageLegacy()也会返回true为Android 11编译这两个选项在Android 11设备上都不起作用。(但它们仍然适用于Android 10设备)。Environment.getExternalStorageDirectory()和Environment.getExternalStoragePublicDirectory()的路径是
usable again in read mode and very often in write mode too
。这很好,因为您可以使用File类简单地再次列出目录的内容,如下载、图片或DCIM/Camera。 但是将<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
添加到清单文件并实现Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
将为应用程序提供对所有文件的读/写访问权限,即使是在可移动micro sd卡上。 (最后,你可以取消谷歌禁止使用自己的应用程序在自己的Android设备上读/写自己的micro sd卡的禁令)。Environment.isExternalStorageManager()
可用于检查权限是否打开/关闭。 只要你不尝试将你的应用程序上传到play store,你就可以了相关问题 更多 >
编程相关推荐