每次进行动态权限注册的时候,都要使用固定的流程
对该固定代码进行封装,可以在所有界面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