因权限问题模拟器正常运行在手机上运行就会闪退 Permission Denial: reading com.android.providers.media.MediaProvider uri。。

AS在模拟器上能正常运行,但是用手机打开就闪退

今天我自己做了一个简单的音乐播放器,在模拟器上能够正常的运行,但是我把它下载到手机后,一打开运行就闪退,于是我导出APK找我朋友下载来试试,他的手机却能够正常运行,于是我把手机连上AS查看报错,报错提示如下:
在这里插入图片描述

报错这里显示没有权限,我检查了一遍manifests,里面已经加了

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

在这里插入图片描述
于是我把报错信息复制粘贴到网上找,找了一晚上都没找到一个可以成功的方法,正在我准备放弃的时候,头脑灵机一动,心想它既然提示我没有读取权限,那么我就搜如何获取权限,结果终于被我在一篇文章上找到了解决办法。太感谢这位博主了,有强迫症的我,遇到问题不解决就睡不着。

博客文章:https://blog.csdn.net/weixin_45444405/article/details/100935903

解决方法
需要在MainActivity下添加以下代码来手动获取权限
在onCreate下添加:

 protected void judgePermission();

在onCreate外添加

 protected void judgePermission() {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            // 检查该权限是否已经获取
            // 权限是否已经 授权 GRANTED---授权  DINIED---拒绝

            // sd卡权限
            String[] SdCardPermission = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
            if (ContextCompat.checkSelfPermission(this, SdCardPermission[0]) != PackageManager.PERMISSION_GRANTED) {
                // 如果没有授予该权限,就去提示用户请求
                ActivityCompat.requestPermissions(this, SdCardPermission, 100);
            }

            //手机状态权限
            String[] readPhoneStatePermission = {Manifest.permission.READ_PHONE_STATE};
            if (ContextCompat.checkSelfPermission(this, readPhoneStatePermission[0]) != PackageManager.PERMISSION_GRANTED) {
                // 如果没有授予该权限,就去提示用户请求
                ActivityCompat.requestPermissions(this, readPhoneStatePermission, 200);
            }

            //定位权限
            String[] locationPermission = {Manifest.permission.ACCESS_FINE_LOCATION};
            if (ContextCompat.checkSelfPermission(this, locationPermission[0]) != PackageManager.PERMISSION_GRANTED) {
                // 如果没有授予该权限,就去提示用户请求
                ActivityCompat.requestPermissions(this, locationPermission, 300);
            }

            String[] ACCESS_COARSE_LOCATION = {Manifest.permission.ACCESS_COARSE_LOCATION};
            if (ContextCompat.checkSelfPermission(this, ACCESS_COARSE_LOCATION[0]) != PackageManager.PERMISSION_GRANTED) {
                // 如果没有授予该权限,就去提示用户请求
                ActivityCompat.requestPermissions(this, ACCESS_COARSE_LOCATION, 400);
            }


            String[] READ_EXTERNAL_STORAGE = {Manifest.permission.READ_EXTERNAL_STORAGE};
            if (ContextCompat.checkSelfPermission(this, READ_EXTERNAL_STORAGE[0]) != PackageManager.PERMISSION_GRANTED) {
                // 如果没有授予该权限,就去提示用户请求
                ActivityCompat.requestPermissions(this, READ_EXTERNAL_STORAGE, 500);
            }

            String[] WRITE_EXTERNAL_STORAGE = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
            if (ContextCompat.checkSelfPermission(this, WRITE_EXTERNAL_STORAGE[0]) != PackageManager.PERMISSION_GRANTED) {
                // 如果没有授予该权限,就去提示用户请求
                ActivityCompat.requestPermissions(this, WRITE_EXTERNAL_STORAGE, 600);
            }

        }else{
            
        }
        
    }

添加后,打开就会弹出获取权限的对话框,然后点击允许即可,然后APP就能够在手机上运行啦。。。。。。
aaaaaaaaaaa真的太感谢这位博主了。。。。。。
aaaaaaaaaaa真的太感谢这位博主了。。。。。。
aaaaaaaaaaa真的太感谢这位博主了。。。。。。
感谢3连~~~~~~~

这是我第一次写的文章,写的还有很多不足的地方,请多多包涵。

再发一下文章的地址
转博客文章:https://blog.csdn.net/weixin_45444405/article/details/100935903

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值