Android高效開發之,Android6.0動態許可權的封裝
阿新 • • 發佈:2019-02-13
每次進行動態許可權註冊的時候,都要使用固定的流程
對該固定程式碼進行封裝,可以在所有介面Activity基類中進行動態許可權的申請。
子類Activity只需要構造一個LinkedList 傳入就可進行許可權的檢查和申請。
基類的程式碼如下
public class BaseActivity extends Activity {
//在這個介面中獲取動態許可權
//檢查是否擁有撥號的許可權
private String[] modelPermissions;
private LinkedList<String> linkedList = new LinkedList<>();
public void checkPermissions(LinkedList<String> modelList){
this.linkedList = modelList;
if (Build.VERSION.SDK_INT >=23 ){
int count = linkedList.size();
for ( int index = 0 ; index < count ; index++ ){
if (ContextCompat.checkSelfPermission(this ,linkedList.get(index)) == PackageManager.PERMISSION_GRANTED ){
//已經獲取了該許可權 就將該許可權從資料來源刪除
linkedList.remove(index);
}
}
ActivityCompat.requestPermissions(this,(String[]) linkedList.toArray(),66);
}
}
//沒有撥號許可權進行動態許可權的註冊
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 66){
int count = grantResults.length;
for (int index = 0 ; index < count ; index ++ ){
if (grantResults[index] != PackageManager.PERMISSION_GRANTED){
Toast.makeText(getApplicationContext(),"您已拒絕"+permissions[index],Toast.LENGTH_LONG).show();
}
}
}
}
}
子類中傳入需要申請的許可權,動態註冊
//進行許可權的申請
LinkedList<String> permissions = new LinkedList<>();
permissions.add(Manifest.permission.CALL_PHONE);
permissions.add(Manifest.permission.ACCESS_WIFI_STATE);
permissions.add(Manifest.permission.CAMERA);
checkPermissions(permissions);
Ok that’s All