Android 6.0动态申请权限
来源:互联网 发布:肩颈按摩仪 知乎 编辑:程序博客网 时间:2024/06/07 11:49
在Android6.0中,系统权限被分为两大类:一类是Normal Permissions,这类权限一般不涉及用户隐私,是不需要用户进行授权的,比如手机震动、访问网络等;另一类是Dangerous Permission,一般是涉及到用户隐私的,需要用户进行授权,比如读取sdcard、访问通讯录等。
一、Android6.0 动态权限申请程序
当我们的Android工程的targetSdkVersion大于等于23的时候,对于Dangerous Permission,我们就需要手动编写逻辑代码实现权限的授权申请。
以申请相机权限为例,首先,需要在配置文件AndroidManifest中申请我们需要的权限:
<!-- 相机 --><uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.hardware.camera.autofocus" /><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /><uses-permission android:name="android.permission.BROADCAST_STICKY" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
第二步,我在需要使用相机权限的地方进行权限申请操作。首先判断当前系统是否为Android6.0或之上的版本,如果不是,直接直接执行下一步,否则进入权限申请程序:
首先,checkSelfPermission检查该权限是否已经申请;
shouldShowRequestPermissionRationale检查用户是否已经拒绝过一次了,再次弹出授权框询问并解释为什么需要这个权限;
ActivityCompat.requestPermissions进行权限申请,申请的结果在onRequestPermissionsResult中接收。
//SDK版本为Android6.0以上 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ //检查权限 int checkPermissionCamera = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA); if(checkPermissionCamera != PackageManager.PERMISSION_GRANTED){ Log.d(Tag, "权限还没有申请"); if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.CAMERA)){ Log.d(Tag, "用户已经拒绝一次了,再次弹出授权框询问并解释为什么需要这个权限"); } else { //申请授权 Log.d(Tag, "申请授权"); ActivityCompat.requestPermissions(MainActivity.this //要申请的权限 , new String[] { Manifest.permission.CAMERA } //申请请求返回码 , 100); } } else{ Log.d(Tag, "权限已经申请"); } }
onRequestPermissionsResult:
@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults){ switch (requestCode){ case 100:{ if(permissions[0].equals(Manifest.permission.CAMERA) && grantR![1.png](http://upload-images.jianshu.io/upload_images/797252-49f05105989697ed.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)esults[0] == PackageManager.PERMISSION_GRANTED){ Log.d(Tag, "CAMERA 权限授权成功"); } else{ Log.d(Tag, "用户拒绝授权权限 CAMERA"); }
/* 获取手机信息权限
//用户同意授权
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){ getDeviceId(); } else {//用户拒绝授权
Toast.makeText(ComplainHistoryActivity.this, "您已禁止该权限,需要重新开启。",
Toast.LENGTH_SHORT).show(); }
*/ break; } } super.onRequestPermissionsResult(requestCode, permissions, grantResults); }
各种情况下的程序运行流程:
1、已经授权:
1.png
2、未授权,授权框点击允许:
2.png
3、未授权,授权框点击拒绝:
3.png
二、普通权限与动态权限
1、普通权限
android.permission.ACCESS_LOCATION_EXTRA_COMMANDSandroid.permission.ACCESS_NETWORK_STATEandroid.permission.ACCESS_NOTIFICATION_POLICYandroid.permission.ACCESS_WIFI_STATEandroid.permission.ACCESS_WIMAX_STATEandroid.permission.BLUETOOTHandroid.permission.BLUETOOTH_ADMINandroid.permission.BROADCAST_STICKYandroid.permission.CHANGE_NETWORK_STATEandroid.permission.CHANGE_WIFI_MULTICAST_STATEandroid.permission.CHANGE_WIFI_STATEandroid.permission.CHANGE_WIMAX_STATEandroid.permission.DISABLE_KEYGUARDandroid.permission.EXPAND_STATUS_BARandroid.permission.FLASHLIGHTandroid.permission.GET_ACCOUNTSandroid.permission.GET_PACKAGE_SIZEandroid.permission.INTERNETandroid.permission.KILL_BACKGROUND_PROCESSESandroid.permission.MODIFY_AUDIO_SETTINGSandroid.permission.NFCandroid.permission.READ_SYNC_SETTINGSandroid.permission.READ_SYNC_STATSandroid.permission.RECEIVE_BOOT_COMPLETEDandroid.permission.REORDER_TASKSandroid.permission.REQUEST_INSTALL_PACKAGESandroid.permission.SET_TIME_ZONEandroid.permission.SET_WALLPAPERandroid.permission.SET_WALLPAPER_HINTSandroid.permission.SUBSCRIBED_FEEDS_READandroid.permission.TRANSMIT_IRandroid.permission.USE_FINGERPRINTandroid.permission.VIBRATEandroid.permission.WAKE_LOCKandroid.permission.WRITE_SYNC_SETTINGScom.android.alarm.permission.SET_ALARMcom.android.launcher.permission.INSTALL_SHORTCUTcom.android.launcher.permission.UNINSTALL_SHORTCUT
2、危险权限
危险权限(6.0权限)是需要单独申请的权限,共分为9组,每组只要有一个权限申请成功,就默认整组权限都可以使用。阅读全文
0 0
- Android 6.0 动态申请权限
- android 6.0权限动态申请
- Android 6.0 动态权限申请
- Android 6.0权限动态申请
- Android 6.0 动态权限申请
- android 6.0 动态权限申请
- Android 6.0 动态权限申请
- Android 6.0动态权限申请
- Android 6.0 动态权限申请
- Android 6.0 动态申请权限
- Android 6.0权限动态申请
- Android 6.0 动态申请权限
- Android 6.0动态权限申请
- Android 6.0动态权限申请
- android 6.0动态申请权限
- Android 6.0 动态权限申请
- Android 6.0动态申请权限
- Android 6.0 动态权限申请
- websocket、短连接长连接以及轮询简介
- redis实现消息队列
- Android:在程序运行时申请权限(第一行代码android)
- mongodb各种操作命令
- 统计前面比自己小的数的个数-LintCode
- Android 6.0动态申请权限
- BZOJ4170 极光 [二维线段树]
- 形象解释PID算法+PID算法源代码
- 深度学习硬件指南(号称最全)
- 解决“未能加载文件或程序集“netfx.force.conflicts”或它的某一个依赖项”
- 异常(一)
- GKQuadtree
- JSTL格式化日期
- PDF任务该怎样在ABBYY FineReader 中定义