【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運行時權限申請快速學習教程】