打开文件管理器读取录音文件报错问题解决方案
2016-10-17 11:22
260 查看
以下为报错之后打印出来的log信息:
01-01 12:05:32.726 9630 9630 E AndroidRuntime: FATAL EXCEPTION: main
01-01 12:05:32.726 9630 9630 E AndroidRuntime: Process: com.mediatek.filemanager, PID: 9630
01-01 12:05:32.726 9630 9630 E AndroidRuntime: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=9630, uid=10055 requires android.permission.READ_EXTERNAL_STORAGE,
or grantUriPermission()
通过此log我们可以看到,原因是因为SecurityException异常,读取文件需要用到android.permission.READ_EXTERNAL_STORAGE,在相应的
AndroidManifest.xml文件中加入<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />,之后编译down进手机,但是进入文件管理器读取录音文件时仍然报错,异常还是SecurityException,这就让我很尴尬了。
之后开始找问题,这种奇怪的问题百度肯定是没有的,很多都是跟我上面相同的方法,然后我就在对比手头另外一个项目和这个的区别,然后发现重点来了,因为当前我的手机系统是andrid6.0的,也就意味着targetSDK为23,我们来分析下为什么会出现这种现象,有兴趣的可以去阅读google官方文档http://developer.android.com/training/permissions/requesting.html(注:需翻墙)
从android6.0(API23)开始,app需要的权限授权过程已经不在安装的过程,而是在app的运行过程中了。因为用户不需要在安装和更新的时候授权,所以有效的简化了app的安装过程,这样可以给用户更多的自由支配自己的app功能,举个例子:当用户在打开拍照软件时,他会同意给这个app相机的使用权限,但当app想要获取你的位置时,你可以选择不给它获取位置的权限。
android中的权限分为两种:普通权限和危险权限,
普通权限:不会直接获取用户的隐私,如果Manifest中申明了这些权限,系统会自动给予用户这些普通权限
危险权限:顾名思义,会获取用户的隐私,如果你确认需要这些危险权限,用户必须在app中点击同意才能获取(相机,位置,短信,通讯录等等)。
当用户手机的android系统为5.1及以下的系统,或者项目设置的targetSDK为22或者以下,那么所有的权限(普通和危险)都是在安装时候授权的,不会出现本博客所提出的问题。
但是如果你的android系统为6.0及以上并且targetSDK为23及以上,每一个危险的权限都必须在app运行时候逐一让用户点击同意或者拒绝。
解决此问题的最终方法:进入手机 设置-->应用-->文件管理器-->权限-->开启存储空间,此时在进入文件管理器读取录音文件时不会报错了,此方法同样使用与进入SD卡问题,android6.0关于文件管理器报错问题的解决方案希望对大家有所帮助。
01-01 12:05:32.726 9630 9630 E AndroidRuntime: FATAL EXCEPTION: main
01-01 12:05:32.726 9630 9630 E AndroidRuntime: Process: com.mediatek.filemanager, PID: 9630
01-01 12:05:32.726 9630 9630 E AndroidRuntime: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=9630, uid=10055 requires android.permission.READ_EXTERNAL_STORAGE,
or grantUriPermission()
通过此log我们可以看到,原因是因为SecurityException异常,读取文件需要用到android.permission.READ_EXTERNAL_STORAGE,在相应的
AndroidManifest.xml文件中加入<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />,之后编译down进手机,但是进入文件管理器读取录音文件时仍然报错,异常还是SecurityException,这就让我很尴尬了。
之后开始找问题,这种奇怪的问题百度肯定是没有的,很多都是跟我上面相同的方法,然后我就在对比手头另外一个项目和这个的区别,然后发现重点来了,因为当前我的手机系统是andrid6.0的,也就意味着targetSDK为23,我们来分析下为什么会出现这种现象,有兴趣的可以去阅读google官方文档http://developer.android.com/training/permissions/requesting.html(注:需翻墙)
从android6.0(API23)开始,app需要的权限授权过程已经不在安装的过程,而是在app的运行过程中了。因为用户不需要在安装和更新的时候授权,所以有效的简化了app的安装过程,这样可以给用户更多的自由支配自己的app功能,举个例子:当用户在打开拍照软件时,他会同意给这个app相机的使用权限,但当app想要获取你的位置时,你可以选择不给它获取位置的权限。
android中的权限分为两种:普通权限和危险权限,
普通权限:不会直接获取用户的隐私,如果Manifest中申明了这些权限,系统会自动给予用户这些普通权限
危险权限:顾名思义,会获取用户的隐私,如果你确认需要这些危险权限,用户必须在app中点击同意才能获取(相机,位置,短信,通讯录等等)。
当用户手机的android系统为5.1及以下的系统,或者项目设置的targetSDK为22或者以下,那么所有的权限(普通和危险)都是在安装时候授权的,不会出现本博客所提出的问题。
但是如果你的android系统为6.0及以上并且targetSDK为23及以上,每一个危险的权限都必须在app运行时候逐一让用户点击同意或者拒绝。
解决此问题的最终方法:进入手机 设置-->应用-->文件管理器-->权限-->开启存储空间,此时在进入文件管理器读取录音文件时不会报错了,此方法同样使用与进入SD卡问题,android6.0关于文件管理器报错问题的解决方案希望对大家有所帮助。
相关文章推荐
- Cocos2d-js jsb native 运行嵌套proto文件读取失败问题解决方案
- spark SQL读取ORC文件从Driver启动到开始执行Task(或stage)间隔时间太长(计算Partition时间太长)且产出orc单个文件中stripe个数太多问题解决方案
- Python中读取文件乱码问题解决方案
- c# 读取其他程序正打开的文件的时“正由另一进程使用,因此该进程无法访问该文件。"的问题解决方法
- 更改MyEclipse颜色方案后,打开JSP文件,JavaScript背景发白问题的解决方法。
- VS2012 每次编译程序都会出现”无法查找或打开 PDB 文件“问题解决方案
- 五个方案解决Vista文件操作缓慢问题
- Struts中文(包括资源文件)问题解决方案
- 解决 Excel 2007 文件打开缓慢的问题
- Windows XP之间共享文件不能互访问题解决方案
- 解决IE不能打开XML文件和XSL文件问题
- 今天解决了两个关于.NET读取EXCEL文件的问题,记下来,很有用!
- .chm文件打开后无法显示网页问题解决了
- 解决打开文件过多的问题
- Struts2中文件过大上传失败问题解决方案org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException
- 问题解决: vs2008 fatal error LNK1104: 无法打开文件 libcpmtd.lib
- 读取文件时出现中文乱码问题的解决
- 解决Java读取properties文件的中文问题的新办法(不使用native2ascii.exe及其他工具)
- 对于在windows中不能打开.chm文件问题的解决方法
- 解决Vista文件操作缓慢问题:五大方案