android开发体会(一) 权限

从Android 6.0(API 23)开始,允许用户在应用运行时决定是否允许权限,而不是在应用安装的时候。这种方法简化了应用的安装过程,因为用户在安装或更新应用的时候不需要允许权限。他也让用户对应用的功能有更多的控制;例如,用户可以选择给予相机应用相机的权限但是不允许使用设备位置的权限。用户可进入应用设置随时撤销权限。

系统权限被分为两种类型,正常的(normal)和敏感的(dangerous):
正常的权限不会直接让用户的隐私处于危险中。如果你的应用在清单文件中列入了正常的权限,系统会自动允许这些权限。
敏感权限给予应用方位用户的机密数据。如果你的应用在清单文件中列入危险类权限,会明确地让用户对你的应用允许权限。

敏感权限(Dangerous permissions)

Permission GroupPermissions
CALENDARREAD_CALENDAR, WRITE_CALENDAR
CAMERACAMERA
CONTACTSREAD_CONTACTS ,WRITE_CONTACTS, GET_ACCOUNTS
LOCATIONACCESS_FINE_LOCATION , ACCESS_COARSE_LOCATION
MICROPHONERECORD_AUDIO
PHONEREAD_PHONE_STATE, CALL_PHONE READ_CALL_LOG , WRITE_CALL_LOG , ADD_VOICEMAIL , USE_SIP, PROCESS_OUTGOING_CALLS
SENSORSBODY_SENSORS
SMSSEND_SMS RECEIVE_SMS , READ_SMS RECEIVE_WAP_PUSH , RECEIVE_MMS
STORAGEREAD_EXTERNAL_STORAGE , WRITE_EXTERNAL_STORAGE

如果在android6.0以上版本需要申请敏感权限,需要动态申请权限,自己封装了两个函数如下:

private boolean checkAndRequestPermission(final Context context, final String permission, final int requestCode){
    boolean bResult=false;
    if (ContextCompat.checkSelfPermission(context, permission)!= PackageManager.PERMISSION_GRANTED){
        if (!ActivityCompat.shouldShowRequestPermissionRationale((MainActivity)context,permission)){
            AlertDialog.Builder dialogBuilder=new AlertDialog.Builder(context);
            dialogBuilder.setTitle("Notice").setMessage("App need permission"+permission);
            dialogBuilder.setNegativeButton("Cancel",null);
            dialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    ActivityCompat.requestPermissions((MainActivity)context,new String[]{permission},requestCode);
                }
            });
            dialogBuilder.create().show();
        }else{
            ActivityCompat.requestPermissions((MainActivity)context,new String[]{permission},requestCode);
        }
    }else{
        bResult=true;
    }
    return bResult;
}

@Override
public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantedResult){
    switch (requestCode){
        case REQUEST_CODE_FOR_READ_EXTERNAL_STORAGE:
            if (grantedResult.length>0 && grantedResult[0]==PackageManager.PERMISSION_GRANTED){
                //申请权限成功后执行的代码
            }
            break;

        default:
            break;
    }
}

补充说明:
如果用户拒绝某授权。下一次弹框,用户会有一个“不再提醒”的选项的来防止app以后继续请求授权。如果这个选项在拒绝授权前被用户勾选了。下次为这个权限请求requestPermissions时,对话框就不弹出来了,结果就是,app啥都不干。
这将是很差的用户体验,用户做了操作却得不到响应。这种情况需要好好处理一下。在请求requestPermissions前,我们需要检查是否需要展示请求权限的提示通过activity的shouldShowRequestPermissionRationale进行检查。

某些厂商(比如小米)的手机尽管操作系统版本低于6.0,某些时候也需要动态申请权限。

参考链接:http://blog.csdn.net/kjunchen/article/details/51366845
http://itindex.net/detail/54289-android-%E5%BC%80%E5%8F%91
http://blog.csdn.net/lmj623565791/article/details/50709663

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值