Android處理6.0獲取許可權問題的第三方框架------開源專案-Easypermissions
阿新 • • 發佈:2019-02-06
本人昨天要實現 手機拍照,相簿選擇功能的實現, 本以為很簡單,把以前的程式碼拷貝過來就可以咯,但是在 6.0手機測試中,發現 點選手機拍照,直接崩潰咯。連錯誤資訊都沒提示。 特別煩人。 後來聽朋友說,處理 6.0許可權問題,可以使用谷歌退出的三方框架__———————— Easypermissions
Easypermissions簡化了Android M的執行時許可權的申請、結果處理、判斷等步驟。
--------------------------------------------------
1 相關文件
官方文件:
執行時許可權官方文件解釋:
2 為什麼使用Easypermissions
Android M對許可權系統進行了改變。Android M之前所需許可權只需要在AndroidManifest中申請即可。但更新Android M系統後,部分“Dangerous Permission”需要在執行時詢問申請。
如下圖所示:
執行時許可權申請
程式碼中如果需要申請執行時許可權步驟:
1 檢查執行時許可權
ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED
2 申請許可權
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
3 接收許可權處理結果
@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;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
以上即是google建議的執行時許可權處理過程。程式碼量和處理地方還是比較繁瑣的。so,Easypermissions應運而生。
3 如何使用
首先,引用庫
dependencies {
compile 'pub.devrel:easypermissions:0.1.9'
}
同樣,easypermissions處理許可權分為3步。
1 檢查許可權
String[] perms = {Manifest.permission.CAMERA, Manifest.permission.CHANGE_WIFI_STATE};
if (EasyPermissions.hasPermissions(this, perms)) {
//...
} else {
//...
}
2 申請許可權
EasyPermissions.requestPermissions(this, "拍照需要攝像頭許可權",
RC_CAMERA_AND_WIFI, perms);
3 實現EasyPermissions.PermissionCallbacks介面,直接處理許可權是否成功申請
@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);
}
//成功
@Override
public void onPermissionsGranted(int requestCode, List<String> list) {
// Some permissions have been granted
// ...
}
//失敗
@Override
public void onPermissionsDenied(int requestCode, List<String> list) {
// Some permissions have been denied
// ...
}
4 總結
Easypermissions主要簡化了對許可權申請結果的處理和判斷,直接以介面的方式回撥處理結果。不需要再自行進行處理。
好用指數,5星!!!