• android 6.0+ 动态权限 拒绝不再询问后跳转设置应用详情页面


     android 6.0+ 的权限 需要动态申请 这里的权限针对的是 敏感权限:

    SMS(短信)
    SEND_SMS
    RECEIVE_SMS
    READ_SMS
    RECEIVE_WAP_PUSH
    RECEIVE_MMS
    STORAGE(存储卡)
    READ_EXTERNAL_STORAGE
    WRITE_EXTERNAL_STORAGE
    CONTACTS(联系人)
    READ_CONTACTS
    WRITE_CONTACTS
    GET_ACCOUNTS
    PHONE(手机)
    READ_PHONE_STATE
    CALL_PHONE
    READ_CALL_LOG
    WRITE_CALL_LOG
    ADD_VOICEMAIL
    USE_SIP
    PROCESS_OUTGOING_CALLS
    CALENDAR(日历)
    READ_CALENDAR
    WRITE_CALENDAR
    CAMERA(相机)
    CAMERA
    LOCATION(位置)
    ACCESS_FINE_LOCATION
    ACCESS_COARSE_LOCATION
    SENSORS(传感器)
    BODY_SENSORS
    MICROPHONE(麦克风)
    RECORD_AUDIO

    一共用到 以下方法:

    • ContextCompat.checkSelfPermission
      检查应用是否具有某个危险权限。如果应用具有此权限,方法将返回 PackageManager.PERMISSION_GRANTED,并且应用可以继续操作。如果应用不具有此权限,方法将返回 PackageManager.PERMISSION_DENIED,且应用必须明确向用户要求权限。

    • ActivityCompat.requestPermissions
      应用可以通过这个方法动态申请权限,调用后会弹出一个对话框提示用户授权所申请的权限。

    • ActivityCompat.shouldShowRequestPermissionRationale
      如果应用之前请求过此权限但用户拒绝了请求,此方法将返回 true。如果用户在过去拒绝了权限请求,并在权限请求系统对话框中选择了 Don't ask again 选项,此方法将返回 false。如果设备规范禁止应用具有该权限,此方法也会返回 false。

    • onRequestPermissionsResult
      当应用请求权限时,系统将向用户显示一个对话框。当用户响应时,系统将调用应用的 onRequestPermissionsResult() 方法,向其传递用户响应,处理对应的场景

    例:

    <uses-permission android:name="android.permission.READ_CONTACTS" />
    private void requestPermission() {
    if(Build.VERSION.SDK_INT>=23){
    if (ContextCompat.checkSelfPermission(this,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
    //此处一般直接去申请对应的权限 有必要时可以去做判断 if (ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.READ_CONTACTS)) { Log.i(TAG,"shouldShowRequestPermissionRationale"); ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_CONTACTS},MY_PERMISSIONS_REQUEST_READ_CONTACTS); } else {

    ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_CONTACTS},MY_PERMISSIONS_REQUEST_READ_CONTACTS);
                }
    }else{
    //这里是权限已经授予了 去做该做的事

    }
    }

    }

     重写Activity 的  onRequestPermissionsResult方法 接收回调

     @Override
        public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
            switch (requestCode) {
                case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
                    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        Log.i(TAG,"onRequestPermissionsResult granted");
                    } else {
                        Log.i(TAG,"onRequestPermissionsResult denied");
    //弹出框 让用户去应用详情页手动设置权限
    showWaringDialog(); } return; } } } private void showWaringDialog() { AlertDialog dialog = new AlertDialog.Builder(this) .setTitle("警告!") .setMessage("请前往设置->应用->PermissionDemo->权限中打开相关权限,否则功能无法正常运行!") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) {

                   Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

                     Uri uri = Uri.fromParts("package", getPackageName(), null);

                     intent.setData(uri);            }

            }).show();
        }
  • 相关阅读:
    Thinkphp的 is null 查询条件是什么,以及exp表达式如何使用
    thinkphp5多文件上传如何实现
    如何动态改变audio的播放的src
    js插件---10个免费开源的JS音乐播放器插件
    html5页面怎么播放音频和视频
    Thinkphp5图片上传正常,音频和视频上传失败的原因及解决
    leetcode
    HTML5 画一张图
    Linux内核和根文件系统引导加载程序
    [dp] hdu 4472 Count
  • 原文地址:https://www.cnblogs.com/bimingcong/p/10328235.html
Copyright © 2020-2023  润新知