首页 > 代码库 > 【Android运行时权限申请快速学习教程】
【Android运行时权限申请快速学习教程】
1. Android权限介绍
Android权限是Android应用在设备上运行所需要的权力,义务就是为用户带来此Android应用的功能。
问题来源:在Android6.0版本之前,根据App在AndroidManifest申请的权限,在安装此App的时候进行提示权限允许,不允许就不给装不给用,那么我们只能默默的忍受这个APP对我们隐私的侵蚀(Eg.通讯录的读取权限)。
解决办法:后来Google发现,诶,这样会导致Android用户们想用这个APP的某些功能而不能用。因此,在Android6.0将权限分为两类,即Normal Permissions(普通权限)与Dangerous Permission(危险权限),在APP在运行时所需要的权限可进行动态申请。
2. Android运行时权限申请(基于easypermissions)
2.1 问题:
基于easypermissions在Android 6.0版本上申请CAMERA与ACCESS_FINE_LOCATION权限。
2.2 解决问题过程:
I. 在使用权限的Activity中加入onRequestPermissionsReult()请求权限函数。
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); // Forward results to EasyPermissions EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); } }
II. 自定义methodRequiresTwoPermission()需要运行时权限的函数。
@AfterPermissionGranted(RC_CAMERA_AND_LOCATION) private void methodRequiresTwoPermission() { String[] perms = {Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION}; if (EasyPermissions.hasPermissions(this, perms)) { //1、首先检查是否存在此权限 // Already have permission, do the thing // ... } else { // Do not have permissions, request them now EasyPermissions.requestPermissions(this, getString(R.string.camera_and_location_rationale), RC_CAMERA_AND_LOCATION, perms); // 2、没有权限即申请 } }
III. 方便调试,用户究竟是授权或者拒决哪项权限可重写Activity的onPermissionsGranted与onPermissionsDenied函数。
@Override public void onPermissionsGranted(int requestCode, List<String> list) {
// requestCode就是刚刚RC_CAMERA_AND_LOCATION // Some permissions have been granted // ... } @Override public void onPermissionsDenied(int requestCode, List<String> list) {
// Some permissions have been denied
//...
}
3. 总结
第一步,为了兼容Android6.0版本以下的权限申请,我们还是需要在AndroidManifest中申明我们需要的权限;
第二步,Android6.0版本的运行时权限申请使用基于easypermissions进行动态申请。
另外,属于同一权限组里面的其中一个权限被授权,权限组里面剩余的权限都会被授权。
4.参考:
https://developer.android.com/guide/topics/security/permissions.html?hl=zh-cn#normal-dangerous
http://blog.csdn.net/lmj623565791/article/details/50709663
https://github.com/googlesamples/easypermissions
http://mp.weixin.qq.com/s/OQRHEufCUXBA3d3DMZXMKQ
【Android运行时权限申请快速学习教程】