在Android API 29中禁用外部存储

bvjxkvbb  于 2023-10-14  发布在  Android
关注(0)|答案(2)|浏览(192)

我正在尝试实现一些清理工具。越来越多的制造商已经禁止生根设备由于一些“安全原因”,他们甚至不允许你发送OEM解锁请求.
在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卡?

guz6ccqo

guz6ccqo1#

在Android 10上,Environment.getExternalStorageDirectory()Environment.getExternalStoragePublicDirectory()将返回存储路径,但路径不可读或不可写。
1.对于Android 10,如果您将android:requestLegacyExternalStorage="true"添加到清单文件中的应用程序标记,则可以继续使用Environment. getExternalDirectory()和Environment. getExternalDirectory PublicDirectory()提供的路径。在运行时,您的应用可以调用Environment.isExternalStorageLegacy()来检查请求是否已完成。
1.另一种(未知)可能性(仅适用于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实现一个Intent,用户可以在其中更改设置,那么您可以让用户更轻松。有趣的是,Environment. isExternalLegacy()也会返回true。
1.为Android 11编译这两个选项在Android 11设备上都不起作用。(但它们仍然适用于Android 10设备)。Environment. getExternalDirectory()和Environment. getExternalDirectory PublicDirectory()的路径是usable again in read mode and very often in write mode too。这是伟大的,因为人们可以简单地列出目录的内容,如下载或图片或DCIM/相机再次使用文件类。但是将<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />添加到manifest文件并实现Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION的Intent将给予您的应用程序对所有文件的读/写权限,即使是在可移动的micro sd卡上。(最后,你可以删除谷歌禁令不能读/写自己的微型SD卡在自己的Android设备上使用自己的应用程序)。Environment.isExternalStorageManager()可以用来检查权限是否打开/关闭。只要你不试图上传你的应用程序到播放商店你是好的。

goqiplq2

goqiplq22#

使用android:requestLegacyExternalStorage=“true”在您的清单下面<application

相关问题