用EasyPermissions可以方便的請求多個權限.
最近項目中碰到的代碼.貼在這里當個例子.
大神的解說:https://blog.csdn.net/hexingen/article/details/78504814
在build.gradle中添加依賴:
dependencies { compile 'pub.devrel:easypermissions:1.0.1' }
最開始還是在AndroidManifest.xml寫進自己需要的權限:
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
在Activity中.
首先建一個String數組,把需要的權限都加進去:
private String[] mPerms = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA, Manifest.permission.ACCESS_WIFI_STATE};
private static final int PERMISSIONS = 100; //請求碼
請求權限:
//請求所需權限 @AfterPermissionGranted(PERMISSIONS) private void requestPermission() { if (EasyPermissions.hasPermissions(this, mPerms)) { //Log.d(TAG, "onClick: 獲取讀寫內存權限,Camera權限和wifi權限"); } else { EasyPermissions.requestPermissions(this, "獲取讀寫內存權限,Camera權限和wifi權限", PERMISSIONS, mPerms);
//
- 第一個參數:Context對象
- 第二個參數:權限彈窗上的文字提示語。告訴用戶,這個權限用途。
- 第三個參數:這次請求權限的唯一標示,code。
- 第四個參數 : 一些系列的權限
}
}
在onResume()中調用requestPermission():
protected void onResume() { super.onResume(); requestPermission(); }
當請求成功是調用這個方法:
@Override public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) { if (requestCode == PERMISSIONS) { Log.d(TAG, "onPermissionsGranted: 獲取權限"); } }
請求被拒絕時調用這個方法:
@Override public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) { Log.d(TAG, "onPermissionsDenied: 拒絕權限"); if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { new AppSettingsDialog.Builder(this) .setRationale("沒有該權限,此應用程序可能無法正常工作。打開應用設置屏幕以修改應用權限") .setTitle("必需權限") .build() .show(); } }
權限結果是回調在onRequestPermissionsResult()方法中:
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); }