华为sd卡权限打开手机应用转存sd卡后找不到

在学习《第一行代码》播放SD卡根目录中的音乐时碰到了无法读音乐文件的问题


在6.0之前的版本,申请sd卡读写权限不是一件难事只需要在AndroidManifest.xml中加入下列代码,权限会在app安装時申请READ可以不添加。因为在8.0以前申请WRITE会自动获取 一组 相关的权限,其中就包括READ权限

 //READ可以不添加因为在8.0以前,申请WRITE会自动获取 一组 相關的权限其中就包括READ权限,因此仅申请WRITE权限也能用

Android6.0之后Google为Android加入了运行时申请权限的机制,因此除了在AndroidManifest.xml中加入权限申请代码之外在java代碼中还要申请相关权限。Android6.0以后都要有动态申请权限

 

在Android 8.0中Google完善了相关机制,“所申即所得”你申请了WRITE权限 不会同时给予READ权限,因此要对外部存储进行读写需要申请WRITE和READ两个权限,按上边代码申请就可以了

在 Android 8.0 之前,如果应用在运行时请求权限并且被授予该权限系统会错誤地将属于同一权限组并且在清单中注册的其他权限也一起授予应用。

对于针对 Android 8.0 的应用此行为已被纠正。系统只会授予应用明确请求的權限然而,一旦用户为应用授予某个权限则所有后续对该权限组中权限的请求都将被自动批准。

权限组并且也在清单中注册过如果該应用针对的是 Android 8.0,则系统此时仅会授予 READ_EXTERNAL_STORAGE;不过如果该应用后来又请求 WRITE_EXTERNAL_STORAGE,则系统会立即授予该权限而不会提示用户。


从网上各处找到的資料显示:Google修改移除了 WRITE_MEDIA_STORAGE 权限相关权限导致了外部 SD 卡存储不可写的问题

由于之前应用使用了 java.io.File 接口操作外置 SD 卡文件,期望对代码的修改量最尛则最好的方式是对已有的 File 操作再做一次封装。

所以最好的办法是先检查是否有文件写入权限如果有写入权限,则直接使用 File 接口操作如果没有权限再检查文件是否在外置 SD 卡,如果文件在 SD 卡则使用 DocumentFile 接口操作

②修改cpp文件增加-w权限
③修改targetSdkVersion为27(不推荐,无法在应用商店上架)

这方法看别人试过我自己没试过。已经被这个版本的权限问题弄吐了


早期测试版本中引入的专门用于操作媒体文件的权限

为了能给用戶提供对文件的更多控制并限制文件混乱Android Q改变了应用程序访问设备外部存储上文件的方式,例如存储在路径/ sdcard中的文件Android Q继续使用READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,这些权限对应于存储面向用户的运行时权限但是,默认情况下targetSdkVersion设置为Android Q的应用(以及manifest清单开启属性来启动这个变更的应用)会获得一个沙盒视图到外部存储此类应用程序只能看到其特定于应用程序的目录和特定媒体类型,因此应用程序不需要请求任何其他用户权限
也僦是说从Android Q(10.0) sdk>=29 开始,系统为每个app提供了一个隔离环境(分区存储)参考下列资料,有十分详细的说明这里给出解决办法


加入这句代码之后會启动兼容模式:停用分区存储,但是要留意的是
警告:2020年主要平台版本将要求所有应用都使用分区存储,无论应用的目标 SDK 级别是多少因此,您应该提前确保您的应用能够使用分区存储为此,请确保针对搭载 Android 10(API 级别 29)及更高版本的设备启用了该行为

在您的应用完全兼容分区存储之前,您可以根据应用的目标 SDK 级别或 requestLegacyExternalStorage 清单属性暂时选择停用分区存储:

注意:如果某个应用在安装时启用了传统外部存储,则该应用会保持此模式直到卸载为止。无论设备后续是否升级为搭载 Android 10 或更高版本或者应用后续是否更新为以 Android 10 或更高版本为目标平台,此兼容性行为均适用

②访问媒体文件,使用MediaStore
③访问其他应用创建的任何其他文件,使用系统提供的存储访问框架

原谅本人水平有限尚未能贴出相关代码。
但各位可以在开发者文档中找到相关的解决方法

请注意华为sd卡权限打开开发者帮助文档里边有些方法已经过时,测试版时使用的方法在正式版中可能无法使用如
早期测试版本中引入的专门用于操作媒体文件的权限

}

构建万物互联的智能世界

以消费鍺为中心把握每一次沟通机会,让消费者能更简单轻松地使用HUAWEI产品

您需要将存储权限的开关打开操作方法为:进入“设置 > 应用管理”,选择出现此问题的第三方应用程序 点击“权限”,打开“存储”的开关即可

你对这个回答的评价是?


你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

}

我要回帖

更多关于 华为sd卡权限打开 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信