Android中的运行时权限处理,最简单的方法。
2016-12-20 19:08
471 查看
非常好的 Android运行时权限 处理开源项目
我们都知道 Android 6.0 在原有的AndroidManifest.xml 文件中声明权限的基础上,又新增了运行时权限动态检测,对于一些没有危险性的权限 直接在AndroidManifest.xml 中申明之后就可以使用 对于有危险性的权限需要 在运行时动态检测。普通权限的有:
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS android.permission.ACCESS_NETWORK_STATE android.permission.ACCESS_NOTIFICATION_POLICY android.permission.ACCESS_WIFI_STATE android.permission.BLUETOOTH android.permission.BLUETOOTH_ADMIN android.permission.BROADCAST_STICKY android.permission.CHANGE_NETWORK_STATE android.permission.CHANGE_WIFI_MULTICAST_STATE android.permission.CHANGE_WIFI_STATE android.permission.DISABLE_KEYGUARD android.permission.EXPAND_STATUS_BAR android.permission.GET_PACKAGE_SIZE android.permission.INSTALL_SHORTCUT android.permission.INTERNET android.permission.KILL_BACKGROUND_PROCESSES android.permission.MODIFY_AUDIO_SETTINGS android.permission.NFC android.permission.READ_SYNC_SETTINGS android.permission.READ_SYNC_STATS android.permission.RECEIVE_BOOT_COMPLETED android.permission.REORDER_TASKS android.permission.REQUEST_INSTALL_PACKAGES android.permission.SET_ALARM android.permission.SET_TIME_ZONE android.permission.SET_WALLPAPER android.permission.SET_WALLPAPER_HINTS android.permission.TRANSMIT_IR android.permission.UNINSTALL_SHORTCUT android.permission.USE_FINGERPRINT android.permission.VIBRATE android.permission.WAKE_LOCK android.permission.WRITE_SYNC_SETTINGS
危险权限有:
group:android.permission-group.CONTACTS permission:android.permission.WRITE_CONTACTS permission:android.permission.GET_ACCOUNTS permission:android.permission.READ_CONTACTS 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:android.permission-group.CALENDAR permission:android.permission.READ_CALENDAR permission:android.permission.WRITE_CALENDAR group:android.permission-group.CAMERA permission:android.permission.CAMERA group:android.permission-group.SENSORS permission:android.permission.BODY_SENSORS group:android.permission-group.LOCATION permission:android.permission.ACCESS_FINE_LOCATION 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: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
危险权限一般都是成组的,当一组中一个权限授予,其他权限也默认会授予
例如: 授权了
permission:android.permission.WRITE_CALENDAR
就会自动授权
permission:android.permission.READ_EXTERNAL_STORAGE
这些权限,要是自己加 就比较麻烦,GitHub上有个非常好的开源项目PermissionGen
使用这个项目只需要在项目的依赖中添加依赖,再添加必须的代码,直接编译 就可以用
下面就写一写 怎么使用
通过 Gradle ( 1、2 )
1、在你的项目 project 的build.gradle 中添加一下代码 就能够使用别人的远程maven依赖
allprojects { repositories { mavenCentral() } }
2、在你的项目 Module 的 build.gradle 中 添加
compile 'com.lovedise:permissiongen:0.1.1+' //如果已经有 compile 用逗号分隔 在后面添加,
3、 然后就可以在项目中需要使用 权限的地方 调用代码。
当你请求权限的时候使用
PermissionGen.with(MainActivity.this) .addRequestCode(100) .permissions( Manifest.permission.READ_CONTACTS, Manifest.permission.RECEIVE_SMS, Manifest.permission.WRITE_CONTACTS) .request();
或者
PermissionGen.needPermission(ContactFragment.this, 100, new String[] { Manifest.permission.READ_CONTACTS, Manifest.permission.RECEIVE_SMS, Manifest.permission.WRITE_CONTACTS } );
在Activity 或者Fragment 中重写 onRequestPermissionsResult 方法 添加如下的代码.
@Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { PermissionGen.onRequestPermissionsResult(this, requestCode, permissions, grantResults); }
当权限获取成功时 调用
@PermissionSuccess(requestCode = 100) public void doSomething(){ Toast.makeText(this, "Contact permission is granted", Toast.LENGTH_SHORT).show(); }
权限获取失败时 调用
@PermissionFail(requestCode = 100) public void doFailSomething(){ Toast.makeText(this, "Contact permission is not granted", t.LENGTH_SHORT).show(); }
ok! 就这么简单。
现在运行你的项目,就可以看到效果了。相关文章推荐
- Android 6.0 运行时权限简单处理
- Android 6.0 运行时权限简单处理
- PermissionsDispatcher库的使用(简单处理Android 6.0系统中的运行时权限的开源库)
- Android 运行时权限处理封装在 BaseActivity 中,方便业务申请时只需要简单的 1,2 行代码即可成功处理权限申请
- 适配不同分辨率的Android手机的简单处理方法
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理完全解析
- android的viewbadger"徽章"任何给定的Android视图,而无需在运行时布局,以迎合在一个简单的方法
- 适配不同分辨率的Android手机的简单处理方法
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理完全解析
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- 适配不同分辨率的Android手机的简单处理方法
- Android 6.0 运行时权限处理完全解析
- Android 6.0 运行时权限处理完全解析
- Android 6.0 运行时权限处理完全解析
- Android 6.0 运行时权限处理
- Android 6.0 Marshmallow运行时权限处理
- Android 6.0 运行时权限处理