Android开发之API29以上Environment.getExternalStoragePublicDirectory废弃的问题

在API29及以上版本,Environment.getExternalStoragePublicDirectory被弃用。源码注释提供了替代方案,新目录路径为根目录/Android/data/包名/file。
摘要由CSDN通过智能技术生成

在API29的时候就会提示API失效如下图:Environment.getExternalStoragePublicDirectory

代替方法也很简单,我们点进去看源码就会看到注释信息给我们的提示的替代方案:

然后我分别打印了下这些对应代码的目录如下图:

总体目录代表的是根目录/Android/data/包名/file

上面目录对应的代码如下:

File externalFilesDir1 = getExternalFilesDir(Environment.DIRECTORY_ALARMS);
        File externalFilesDir2 = getExternalFilesDir(Environment.DIRECTORY_AUDIOBOOKS);
        File externalFilesDir3 = getExternalFilesDir(Environment.DIRECTORY_DCIM);
        File externalFilesDir4 = getExternalFilesDir(Environ
在 Kotlin 中,使用 Android 13 (API 级别 33) 获取`Environment.getExternalStoragePublicDirectory`的读取权限来安装 APK,需要遵循新的存储访问框架(Scoped Storage)的要求。从 Android 10(API 级别 29)开始,Google 引入了更严格的存储访问限制,而 Android 11(API 级别 30)进一步限制了对外部存储的访问。从 Android 13 开始,对于安装 APK 这样的操作,还需要特别的权限。 以下是获取存储权限并在 Kotlin 中安装 APK 的基本步骤: 1. 确保你的应用具有安装未知来源应用的权限。用户需要在设备的设置中手动授予这个权限,你的应用无法直接请求这个权限。 2. 在你的应用中检查并请求运行时权限。对于 Android 13,如果你的应用需要读取外部存储目录,需要使用 `READ_EXTERNAL_STORAGE` 权限。 3. 使用 `Intent` 和 `ACTION_INSTALL_PACKAGE` 来安装 APK。从 Android 10 开始,你不能直接访问文件系统路径,而是需要通过 `MediaStore` API 或者 `ContentResolver` 来访问外部存储中的文件。 示例代码如下: ```kotlin if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val intent = Intent(Intent.ACTION_VIEW) intent.setDataAndType(Uri.fromFile(File apkFilePath), "application/vnd.android.package-archive") intent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION startActivity(intent) } ``` 在这里,`apkFilePath` 是 APK 文件的完整路径。注意,从 Android 11 开始,你不能直接使用文件路径,而应该使用 `FileProvider` 来获取一个适用于 `content://` URI 的路径。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值