首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android M读取外部存储权限错误

Android M是指Android操作系统的第6个主要版本,也被称为Android 6.0或Marshmallow。在Android M中,引入了一种新的权限模型,即运行时权限。其中,读取外部存储权限是其中之一。

读取外部存储权限错误是指在Android M及以上版本中,应用程序在尝试读取外部存储设备(如SD卡)上的文件时,未经用户授权或未正确处理权限请求导致的错误。

为了保护用户的隐私和数据安全,Android M引入了运行时权限模型。在此模型下,应用程序需要在运行时向用户请求权限,并且用户可以选择授予或拒绝权限。对于读取外部存储权限,应用程序需要在运行时请求该权限,并在用户授予权限后才能读取外部存储设备上的文件。

为了解决读取外部存储权限错误,开发者可以按照以下步骤进行操作:

  1. 在AndroidManifest.xml文件中添加权限声明:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  2. 在代码中检查权限是否已经被授予:if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { // 权限未被授予,需要向用户请求权限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE); } else { // 权限已被授予,可以进行读取外部存储的操作 // TODO: 读取外部存储的代码 }
  3. 处理权限请求结果:@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == REQUEST_CODE) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 用户授予了读取外部存储权限,可以进行读取外部存储的操作 // TODO: 读取外部存储的代码 } else { // 用户拒绝了读取外部存储权限,需要提示用户权限的重要性或提供其他解决方案 } } }

在应用场景方面,读取外部存储权限通常用于访问和读取用户存储在外部存储设备上的文件,例如读取照片、音乐、视频等媒体文件,或者读取其他应用程序共享的文件。

腾讯云提供了丰富的云服务和产品,其中与读取外部存储权限相关的产品包括对象存储(COS)和移动推送(Xinge Push)。

  • 对象存储(COS):腾讯云对象存储(COS)是一种安全、高可用、低成本的云存储服务,可以用于存储和访问应用程序中的各种文件,包括读取外部存储设备上的文件。详情请参考:腾讯云对象存储(COS)
  • 移动推送(Xinge Push):腾讯云移动推送(Xinge Push)是一种可靠、高效的移动消息推送服务,可以用于向应用程序的用户发送通知消息,包括在读取外部存储权限错误时向用户发送相关提示信息。详情请参考:腾讯云移动推送(Xinge Push)

通过使用腾讯云的相关产品,开发者可以更方便地实现读取外部存储权限,并提供更好的用户体验。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android外部存储

一 各版本外部存储特性 1、Android 4.0 ● 支持模拟外部存储(通过FUSE实现) ● 出现了主外部存储,以及二级外部存储(没有接口对外暴露) ● 支持MTP(Media Transfer Protocol...,每个用户拥有独立的外部存储 4、Android 4.4 ● 读操作需要声明READ_EXTERNAL_STORAGE权限 ● 应用读写在外部存储的应用目录(/sdcard/Android//...5、Android 6.0 ● 外部存储支持动态权限管理 ● Adoptable Storage特性 6、Android 7.0 ● 引入作用域目录访问 ?...影响 ● Android 6.0以后,由于动态权限管理的需要,会存在多个fuse挂载点,这导致inotify/FileObserver对外部存储进行文件事件监控时,会丢失事件。...动态权限管理 a.背景 Android 6.0引入了运行时权限,允许用户对危险权限进行动态授权,这部分权限包含外部存储访问权限

82030

Android外部存储

---- 一、各版本外部存储特性 1、Android 4.0 ● 支持模拟外部存储(通过FUSE实现) ● 出现了主外部存储,以及二级外部存储(没有接口对外暴露) ● 支持MTP(Media Transfer...● 支持多用户,每个用户拥有独立的外部存储 4、Android 4.4 ● 读操作需要声明READ_EXTERNAL_STORAGE权限 ● 应用读写在外部存储的应用目录(/sdcard/Android...Storage Access Framework) [1.png] 5、Android 6.0 ● 外部存储支持动态权限管理 ● Adoptable Storage特性 6、Android 7.0 ●...影响 ● Android 6.0以后,由于动态权限管理的需要,会存在多个fuse挂载点,这导致inotify/FileObserver对外部存储进行文件事件监控时,会丢失事件。...动态权限管理 a.背景 Android 6.0引入了运行时权限,允许用户对危险权限进行动态授权,这部分权限包含外部存储访问权限

2.2K60

Android外部存储

Transfer Protocol) Android 4.1 开发者选项出现”强制应用声明读权限才可以进行读操作”的开关 Android 4.2 支持多用户,每个用户拥有独立的外部存储 Android...4.4 读操作需要声明READ_EXTERNAL_STORAGE权限 应用读写在外部存储的应用目录(/sdcard/Android/ /)不需要声明权限 增加了Context.getExternalFilesDirs...Android 6.0 外部存储支持动态权限管理 Adoptable Storage特性 Android 7.0 引入作用域目录访问 ?...影响 Android 6.0以后,由于动态权限管理的需要,会存在多个fuse挂载点,这导致inotify/FileObserver对外部存储进行文件事件监控时,会丢失事件。...动态权限管理 a.背景 Android 6.0引入了运行时权限,允许用户对危险权限进行动态授权,这部分权限包含外部存储访问权限

2.6K50

Android 8.0 读取内部和外部存储以及外置SDcard的方法

最近碰到询问我这个读取SDcard的问题, 很久没有看这部分了,所以大致看了一下, 顺便记录一下。在Android 8.0上做了测试。...一般的Android App能读取存储空间主要有三种: app自己的私有目录,也就是/data/data/《app 目录》。 读写这个目录不需要单独的权限。...Android通过Seandroid对权限进行了管理。 /sdcard。 这个其实是Android手机的internal storage。...也就是一般你买手机的时候, 说手机是64GB的存储空间,就是说的这个地方。这个地方的读写需要申请权限。...以上这篇Android 8.0 读取内部和外部存储以及外置SDcard的方法就是小编分享给大家的全部内容了,希望能给大家一个参考。

2K20

Android的内部存储外部存储怎么区分?

外部存储外部存储可以分为外部私有存储外部公有存储。...外部私有存储位于/storage/emulated/0/Android/data/包名这个目录下,它和内部存储一样是私有的,并且其他应用程序是无法访问的,会随着应用程序的卸载而被清除。        ...它对所有的应用程序都是可见的,前提是该应用程序有外部存储权限,而且外部公有存储中的数据不会随应用程序的卸载而被删除。 2.使用哪些api进行访问?   ...(String type) context.getExternalCacheDir()      //  /storage/emulated/0/Android/data//cache   外部公有存储...注:在Android10之后,不能再使用外部公有存储下的两个方法了,应用程序只能访问自己的外部私有目录,所以Android10之后尽量使用外部私有存储下的两个方法。

54111

Android 存储学习之在外部存储中读写文件

上节学习了如何在手机内部存储中读写文件,本节学习如何在手机的外部存储中读写文件。那就是如何在Sdcard中读写文件。...那我们还是用以前登录界面的例子举例说明,(登录界面请看上节Android 存储学习之在内部存储中读写文件) 先我们显示写的代码: 当点击确定并且自动登录的钩是选中的,则就会在sdcard文件夹写创建一个...Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show(); } } } 执行后,显示效果如下: 同理读也就是将上节读取的路径改为...sdcard的路径即可: public void readInfo() { File file = new File("sdcard/info.txt"); //如果文件存在,则读取...//把字节流转化为字符流 BufferedReader buffer = new BufferedReader(new InputStreamReader(fin)); //读取文件中的用户名和密码

1.5K10

错误记录】Android 分区存储下的 SD 卡应用专属外部存储空间目录访问 ( 需手动创建应用专属外部存储空间目录 )

文章目录 一、报错信息 二、解决方案 一、报错信息 ---- 开发时 , 需要向外置 SD 卡中拷贝一些文件 , 应用读取这些文件 , 进行相关配置 ; 但是 Android 系统 , 并不会主动为应用创建文件..., 外置 SD 卡的应用专属外部存储空间目录 , 需要开发者自己创建 ; 当前的包名是 com.example.filepath ; android { defaultConfig {..., 说明 Android 系统并不是自动为每个应用都创建一个应用专属外部存储空间目录 ; 二、解决方案 ---- 在应用中 , 获取 应用专属外部存储空间目录 下的 cache 目录 , 如果没有创建该目录...; 该目录的路径是 /storage/emulated/0/Android/data/com.example.filepath/cache ; /** * 应用专属外部存储空间目录下的...cache 目录 */ public void generateExternalCacheDir() { // 获取应用专属外部存储空间目录下的 cache 目录

62010

Android 读取已安装应用列表需要申请权限吗?

使用华为、Vivo等手机的人或者Android开发者应该对读取应用列表权限不陌生,但是作为开发者的你有没有想过这个权限需要申请吗?是静态申请还是动态申请?...打开Demo时,不弹出申请读取已安装应用列表权限对话框,能够获取到全部已安装应用列表。 我没有申请任何权限,Vivo X20为什么会出现申请读取已安装应用列表权限对话框呢?...Nexus 5X中没有找到读取已安装应用列表权限。...meta 9 读取已安装应用列表 再看下Vivo X20,在打开Demo的时候弹出申请权限对话框了,说明Vivo也属于那部分国内厂商,由于在弹出申请读取已安装应用列表权限对话框时,我允许了,所以打开Vivo...3、结论 Android 读取已安装应用列表不需要申请权限,因为Android权限列表中没有权限是用于读取已安装应用列表的。

14.4K20

错误记录】Android 分区存储 错误 ( 文件格式不匹配 )

文章目录 一、报错信息 二、解决方案 一、报错信息 ---- Android 分区存储 , 将 图片文件 保存到 Movies 目录下报错 : 2021-05-18 14:31:50.691 1341-...MediaStore 进行文件操作 , MediaStore 的如下内部类 Files , Images , Downloads , Audio , Video , 负责相应目录的文件操作 , 分别对应外置存储中的...Document , Pictures , Download , Music , Movies 目录 ; 对应格式的文件 , 只能放在特定的目录中 ; 文件存储类型限制 : 文件一旦放错位置 , 就会抛异常...; 专门存储 图片文件 的目录 Pictures , 只能存放图片 , 不能存放其它类型文件 , 专门存储 视频文件 的目录 Movies , 只能存视频文件 ; 专门存储音频文件的目录...Music , 只能存储音频文件 ; 专门存储文档文件的目录 Document , 只能存储文档相关文件 ; Download 目录可以放置任何类型的文件 ;

1.8K10

错误记录】Android 低版本使用分区存储错误 ( 低版本存储不得使用 MediaStore )

文章目录 一、报错信息 二、解决方案 Android 低版本系统中不能使用分区存储方式管理文件 ; 一、报错信息 ---- 在 Android 9 版本中使用 MediaStore 进行分区存储 ;...在 Android 11 及以上的版本中使用分区存储 ; 在 Android 10 及以下的版本中 , 使用普通的存储方式 ; 访问外置 SD 卡 必须开发两套存储方式 去兼容 分区存储 及 之前的版本...; Android 10 过渡版本中 , 可以选择使用分区存储方式 , 也可以选择使用之前的存储方式 ; Android 10 版本是过渡版本 , 在该版本中可以选择启用分区存储 , 也可以选择不用..., 在清单文件的 application 节点设置 requestLegacyExternalStorage=“true” 属性可以设置 不启用 分区存储 方案 , 但是 在 Android 11 中...必须 启用分区存储 , 否则应用不能兼容 Android 11 系统 ;

59220

Android 热修复】热修复原理 ( Dex 文件拷贝后续操作 | 外部存储空间权限申请 | 执行效果验证 | 源码资源 )

文章目录 一、Dex 文件准备 二、外部存储空间权限申请 1、清单文件申请权限 2、动态申请权限 三、文件拷贝 1、文件拷贝 2、执行效果 四、 源码资源 一、Dex 文件准备 ---- 在 【Android...卡跟目录中的文件 /storage/emulated/0/update.dex , 拷贝到了 /data/user/0/kim.hsl.hotfix/app_odex/update.dex 目录中 ; 二、外部存储空间权限申请...中的 onCreate 方法中动态申请权限 : 参考 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 最简单用法 | 一行代码搞定权限申请 | 推荐用法...File(filePath); if (file.exists()) { file.delete(); } // 准备输入流, 读取...= null; // 准备输出流, 输出到目的文件 FileOutputStream os = null; try { // 读取

36010

如何在父进程中读取子(外部)进程的标准输出和标准错误输出结果

设置标准输出和标准错误输出句柄 si.hStdError = hWrite; // 把创建进程的标准错误输出重定向到管道输入 si.hStdOutput = hWrite...我们使用STARTF_USESTDHANDLES的原因是:我们使用了标准输出和标准错误输出句柄。...我想应该有人借用过网上相似的代码,但是却发现一个问题,就是读取出来的信息是不全的。这个问题的关键就在读取的方法上,其实没什么玄妙,只要控制好读取起始位置就行了。...] pchReadBuffer; pchReadBuffer = NULL; } return bSuc; }         这个函数传入了一个指向指针的指针用于外部获取结果...,外部一定要释放这段空间以免造成内存泄露。

3.8K10

错误记录】Android 应用连接 BLE 设备无法读取数据 ( 可以写出数据 | 无法读取数据 )

文章目录 一、问题描述 二、问题分析 三、完整设置代码 一、问题描述 ---- Android 应用连接 BLE 硬件设备后 , 出现如下情况 : 发送数据成功 : Android 应用 向 BLE 硬件设备发送数据..., 成功 ; 接收数据失败 : Android 应用 无法接收到 BLE 硬件设备发送给手机的数据 ; 二、问题分析 ---- 举个栗子 : 这是在 Google 官方的 BLE 蓝牙示例程序 BluetoothLeGatt...代码文件地址 : BluetoothLeService.java 上述代码是在遍历完 BluetoothGattService 与 BluetoothGattCharacteristic 之后 , 选择读取指定特性...集合中的所有元素设置 BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE 值 , 然后写出该 BluetoothGattDescriptor , 此时设置读取该...BluetoothGattCharacteristic 特性值才能生效 , 否则无法读取其中的数据 ; BluetoothGattCharacteristic 中维护了下面的变量 , BluetoothGattDescriptor

1.4K00
领券