Android 运行时权限 Runtime Permissions
2016-12-27 16:29
639 查看
运行时权限
6.0引入了一种新的权限模式,用户可直接在运行时管理应用权限。这种模式让用户能够更好地了解和控制权限,同时为应用开发者精简了安装和自动更新过程。用户可为所安装的各个应用分别授予或撤销权限。对于以 Android 6.0(API 23)或更高版本为目标平台的应用,请务必在运行时检查和请求权限。要确定您的应用是否已被授予权限,请调用新增的 checkSelfPermission() 方法。要请求权限,请调用新增的 requestPermissions() 方法。即使您的应用并不以 Android 6.0(API 级别 23)为目标平台,您也应该在新权限模式下测试您的应用。
Developers>Android 6.0 变更
Normal Permissions:
ACCESS_LOCATION_EXTRA_COMMANDSACCESS_NETWORK_STATE
ACCESS_NOTIFICATION_POLICY
ACCESS_WIFI_STATE
BLUETOOTH
BLUETOOTH_ADMIN
BROADCAST_STICKY
CHANGE_NETWORK_STATE
CHANGE_WIFI_MULTICAST_STATE
CHANGE_WIFI_STATE
DISABLE_KEYGUARD
EXPAND_STATUS_BAR
GET_PACKAGE_SIZE
INSTALL_SHORTCUT
INTERNET
KILL_BACKGROUND_PROCESSES
MODIFY_AUDIO_SETTINGS
NFC
READ_SYNC_SETTINGS
READ_SYNC_STATS
RECEIVE_BOOT_COMPLETED
REORDER_TASKS
REQUEST_INSTALL_PACKAGES
SET_ALARM
SET_TIME_ZONE
SET_WALLPAPER
SET_WALLPAPER_HINTS
TRANSMIT_IR
UNINSTALL_SHORTCUT
USE_FINGERPRINT
VIBRATE
WAKE_LOCK
WRITE_SYNC_SETTINGS
Dangerous Permissions
shell@zenltevzw:/ $ pm list permissions -d -g Dangerous Permissions: group:android.permission-group.LGT_CONTENT group:com.sec.enterprise.permission-group.mdm group:com.google.android.gms.permission.CAR_INFORMATION permission:com.google.android.gms.permission.CAR_VENDOR_EXTENSION permission:com.google.android.gms.permission.CAR_MILEAGE permission:com.google.android.gms.permission.CAR_FUEL group:android.permission-group.CONTACTS permission:android.permission.WRITE_CONTACTS permission:android.permission.GET_ACCOUNTS permission:android.permission.READ_CONTACTS group:android.permission-group.MESSAGES permission:com.google.android.providers.talk.permission.WRITE_ONLY permission:com.google.android.gm.permission.READ_CONTENT_PROVIDER permission:com.google.android.providers.talk.permission.READ_ONLY group:android.permission-group.PHONE permission:android.permission.READ_CALL_LOG permission:android.permission.READ_PHONE_STATE permission:android.permission.CALL_PHONE permission:android.permission.WRITE_CALL_LOG permission:android.permission.USE_SIP permission:android.permission.PROCESS_OUTGOING_CALLS permission:com.android.voicemail.permission.ADD_VOICEMAIL group:com.sec.permission-group.SECURITY group:android.permission-group.CALENDAR permission:android.permission.READ_CALENDAR permission:android.permission.WRITE_CALENDAR group:android.permission-group.CAMERA permission:com.sec.android.app.camera.permission.SHOOTING_MODE permission:android.permission.CAMERA group:com.sec.orca.remoteshare.permission-group.RSHARE group:com.samsung.android.app.memo.permission group:android.permission-group.SENSORS permission:android.permission.BODY_SENSORS group:android.permission-group.LOCATION permission:android.permission.ACCESS_FINE_LOCATION permission:com.google.android.gms.permission.CAR_SPEED permission:android.permission.ACCESS_COARSE_LOCATION group:android.permission-group.STORAGE permission:android.permission.READ_EXTERNAL_STORAGE permission:android.permission.WRITE_EXTERNAL_STORAGE group:android.permission-group.MICROPHONE permission:android.permission.RECORD_AUDIO group:com.samsung.permission-group.SKT group:android.permission-group.SMS permission:android.permission.READ_SMS permission:android.permission.RECEIVE_WAP_PUSH permission:android.permission.RECEIVE_MMS permission:android.permission.RECEIVE_SMS permission:android.permission.SEND_SMS permission:android.permission.READ_CELL_BROADCASTS group:com.sec.android.app.sysscope.permission-group.SYSTEM_DIAGNOSIS ungrouped: permission:com.google.android.apps.photos.permission.GOOGLE_PHOTOS_PROVIDER permission:com.sec.smartcard.permission.SMARTCARD_ADAPTER permission:com.samsung.android.memo.EXTRA_READ permission:com.samsung.android.memo.EXTRA_WRITE shell@zenltevzw:/ $
注意:Dangerous Permission的运行时授权是以group为单位的
检查权限
android.content.Context.checkSelfPermission()返回值:
android.content.pm.PackageManager.PERMISSION_DENIED = -1
android.content.pm.PackageManager.PERMISSION_GRANTED = 0
申请权限
void requestPermissions (String[] permissions, int requestCode)
当申请多组权限时,会逐一弹窗确认。
requestCode用于回调:
Application specific request code to match with a result reported to onRequestPermissionsResult(int, String[], int[]). Should be >= 0
@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // permission was granted, yay! Do the // contacts-related task you need to do. } else { // permission denied, boo! Disable the // functionality that depends on this permission. } return; } } }
解释
boolean shouldShowRequestPermissionRationale (String permission)
申请权限的解释,该方法只有在用户在上次拒绝过你的这个权限申请。再次弹出申请权限的对话框,告诉用户该权限是应用必要的,并且不会危害之类的解释。
// Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.READ_CONTACTS)) // Show an expanation to the user *asynchronously* -- don't block // this thread waiting for the user's response! After the user // sees the explanation, try again to request the permission. }
相关文章推荐
- Android RuntimePermissions运行时权限:批量权限申请
- ionic学习之Android6.0 运行时权限插件cordova-plugin-android-permissions
- Android应用资源---处理运行时改变(Handing Runtime Changes)
- Android 资源之处理运行时更改(Handling Runtime Changes)
- Android M新的运行时权限开发者需要知道的一切
- Android 6.0 权限模型——Permissions
- Android之Handling Runtime Changes(处理运行时更改)
- Android 运行时资源替换----Runtime Resource Overlay
- Neither user 10155 nor current process has android.permission.ACCESS_COARSE_LOCATION. 权限意见添加,运行时无法获取
- Android程序运行时权限与文件系统权限的区别
- Android M 新的运行时权限开发者需要知道的一切
- 从零开始--系统深入学习android(实践-让我们开始写代码-Android框架学习-6.权限(Permissions))
- 通用权限管理系统组件 (GPM - General Permissions Manager) 不需要任何配置文件,程序都可以正常运行
- Android运行时改变的处理(Handling Runtime Changes)
- Android程序运行时权限与文件系统权限的区别
- 通用权限管理系统组件 (GPM - General Permissions Manager) 不需要任何配置文件,程序都可以正常运行
- Android程序运行时权限与文件系统权限的区别
- Android ---Check System Version at Runtime(在软件运行时检查判断系统版本)
- Android程序运行时权限与文件系统权限的区别