Android的Activity跳转探索之Android6.0动态权限管理

来源:互联网 发布:手游龙之刃升阶数据 编辑:程序博客网 时间:2024/06/06 18:15

1.总结昨天朋友问到的一探讨问题,具体需求是:从一App中点击QQ号跳转到腾讯手Q中,这个需求应该很简单吧!

  • 1.简单贴下代码:

     String qqPackageName = "com.tencent.mobileqq"; startActivity(getPackageManager().getLaunchIntentForPackage(qqPackageName));
  • 2.就是这么简单,两行代码就完成两个应用间的的跳转,那么万一用户手机没安装手Q呢?继续代码

  • 3.增加需求,如果当前用户的手Q是登录状态的,直接跳转到当前点击QQ号码的聊天界面,还是代码

    String qqPackageName = "com.tencent.mobileqq";String qq = "123456987";String url = "mqqwpa://im/chat?chat_type=wpa&uin=" + qq;    PackageManager manager = getPackageManager();List<PackageInfo> installedPackages = manager.getInstalledPackages(PackageManager.GET_INSTRUMENTATION);for (PackageInfo info : installedPackages) {    String packageName = info.packageName;    if (TextUtils.equals(packageName, qqPackageName)) {        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));        return;    } else {        if (installedPackages.size() - 1 == installedPackages.indexOf(info)) {            Toast.makeText(MainActivity.this, "经测试,本地未安装QQ", Toast.LENGTH_LONG).show();        }    }
  • 4.出现一问题,关乎权限的,备注:测试机为华为,版本为23

    截图:

    这里写图片描述

  • 5.在点击禁止后再次点击按钮,按钮毫无反应,开发中还从没注意到 “读取已安装应用列表” 这权限,从as的日志中也找不到对应的action等信息,搜索华为和CSDN的论坛,想找找答案,都找不到答案,在华为的论坛也有人提问这问题,无人回帖;在csdn论坛上看到一帖子说 这是华为自家搞出来的权限,继续调试,最后仍然无果(备注:望 走过路过的大牛指点迷津)

2.as的日志都找不到相关的信息提示,考虑是否日志问题

  • 1.call phone的小例子拿来试试

    记得:<uses-permission android:name="android.permission.CALL_PHONE"/>   String num = "12345678910";   Intent intent = new Intent();   intent.setAction(Intent.ACTION_CALL);   intent.setData(Uri.parse("tel:"+num));   startActivity(intent);
  • 2.异常 总是来得这么的突然

     java.lang.IllegalStateException: Could not execute method for android:onClick at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) at android.view.View.performClick(View.java:5264) at android.view.View$PerformClick.run(View.java:21297) at android.os.Handler.handleCallback(Handler.java:743) at android.os.Handler.dispatchMessage(Handler.java:95) ...  Caused by: java.lang.SecurityException: Permission Denial: starting Intent   { act=android.intent.action.CALL dat=tel:xxxxxxxxxxx cmp=com.android.server.telecom/.components.UserCallActivity }   from ProcessRecord{3f02f61 24776:com.wyk.okhttp.okhttpdemo01/u0a754}   (pid=24776, uid=10754) with at android.os.Parcel.readException(Parcel.java:1602)  at android.os.Parcel.readException(Parcel.java:1555)  at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2658)
  • 3.郁闷了去,6.0权限问题咯,那么就玩玩6.0权限问题,还是用代码说话!

      if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {    //向系统请求权限了,这里我还做了一个判断. sdk是M(M = 23 android L)才做这个请求,否则就不做.    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {        requestPermissions(new String[]{"android.permission.CALL_PHONE"}, 001);    }return ;}//Manifest.permission.CALL_PHONE    callPhoneIng();}private void callPhone(){    String num = "12345678910";   Intent intent = new Intent();   intent.setAction(Intent.ACTION_CALL);   intent.setData(Uri.parse("tel:"+num));   startActivity(intent);}
  • 4.看看代码,也不是多难,有很多库对其进行了封装,可以在github首页搜索:android permission,具体的 参考博客:http://blog.csdn.net/lmj623565791/article/details/50709663

  • 5.API

    ContextCompat.checkSelfPermission,用于检测某个权限是否已经被授予, ” PackageManager.PERMISSION_GRANTED “表示已经同意授权

    用于申请权限,第二个参数是需要申请的权限的字符串数组;第三个参数为requestCode,主要用于回调的时候检测
    ActivityCompat.requestPermissions(activity,
    new String[]{“android.permission.CALL_PHONE”},
    001);

    @Override
    public void onRequestPermissionsResult(int requestCode,
    String permissions[], int[] grantResults) {
    //该方法主要用于 权限申请 回调,
    }

    当用户第一次拒绝权限申请,你第二次又弹出授权框,最好还是在这里对权限进行说明,考虑用户体验
    ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
    Manifest.permission.CALL_PHONE)

3.回到华为出现的 ” 读取已安装应用列表 “这一问题

  • 1.从日志上可以看到 “Manifest.permission.CALL_PHONE” ,说明了as 没欺骗了我感情
  • 2.郁闷了,谁来解我忧愁!!!

4.总结:

  • 记录 : 华为机 的 “读取已安装应用列表” 有待大牛指点迷津,西天取经

  • 6.0的各类权限大致都是:检测权限,申请权限,权限回调 这几步骤,还需继续探索其他权限有无不同之处

  • 9月到了,好好学习,天天向上 …

0 0
原创粉丝点击