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

摘要:
ActivityCompt.requestPermissions应用程序可以通过此方法动态地申请权限。调用后,将弹出一个对话框,提示用户授权请求的权限。ActivityCompt.should ShowRequestPermissionRational e如果应用程序以前请求过该权限,但用户拒绝了该请求,则该方法将返回true。如果设备规范禁止应用程序具有此权限,则此方法也将返回false。OnRequestPermissionsResult当应用程序请求许可时,系统将向用户显示一个对话框(=PackageManager.PERMISSION_GRANTED){//通常,如果{Log.i;ActivityCompt.requestPermissions;}else{ActivityCompt.requestPermission;}否则{//这是授予执行任务的权限的位置}}}}重写要接收的活动的onRequestPermissionsResult方法回调@Overridepublicvoid。RequestPermissionsResult{switch{caseMY_PERMISSIONS_REQUEST_READ_CONTACTS:{if{Log.i;}else{Log-i;//弹出框允许用户手动设置应用程序详细信息页面showWarningDialog();}return;}}PrivatevoidshowWarningDialog(){AlertDialogdialog=newAlertDialog.Builder.setTitle(“警告!

 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();
    }

免责声明:文章转载自《android 6.0+ 动态权限 拒绝不再询问后跳转设置应用详情页面》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇更全面的寻找post地址SQL Server返回XML格式数据下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

索引节点(inode)爆满问题处理

后来,我用df-I检查/data分区的索引节点,发现它已满,这导致系统无法创建新的目录和文件。inode是用于存储这些数据的信息,包括文件大小、所有者、用户组、读写权限等。inode索引每个文件的信息,因此它具有inode的值。根据指令,操作系统可以通过inode值最快找到对应的文件。故障排除的原因是/data/cache目录中有大量小字节缓存文件,这些文件...

Docker Compose 版本过高(Docker版本不匹配),降低docker-compose版本

好了,开始降级docker-compose,先卸载:#pipuninstalldocker-compose再安装指定版本:#pipinstalldocker-compose==1.5.2至此,docker-compose降版本成功!...

mysql修改字段防止锁表

步骤1:修改大表、addcolumn或dropcolumn的字段,操作完成后将锁定该表。此时,查询ok、insert和update将等待锁定。...

sqlserver 计算 百分比

selectltrim+'%'As百分比NUMERIC(P,S)P的默认值是:38S的默认值是:-84~127numeric(a,b)函数有两个参数,前面一个为总的位数,后面一个参数是小数点后的位数,例如numeric(5,2)是总位数为5,小数点后为2位的数,也就是说这个字段的整数位最大是3位。...

Linux系统添加永久静态路由的方法

按照Linux启动的顺序,rc本地的内容在Linux中的所有服务启动后执行。也就是说,local的内容在netfs之后执行。也就是说,当netfs启动时,不会添加服务器上的静态路由,因此无法成功装载netfs。...

001_Three.js中的跨域问题

】当请求的资源和请求脚本不在同一域中时,将发生跨域。有关详细信息,请参见链接。这是一个需要进一步考虑的问题。它是一个装载机。它加载本地资源。为什么要跨域请求?...