前言:系统权限的概念我就不多说了,直入正题吧,我在基类里做了一下封装,目的就是为了相同操作重复使用,代码中都有详细的讲解。
功能效果讲解:若多个权限申请时,只要有一个权限未通过,就提示未授权,再次点击时,则只会申请之前没有通过的权限,直到所有权限通过才执行下面的程序。
第一步:创意一个基类BaseActivity。
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
//为子类提供一个权限检查方法
public boolean hasPermission(String... permissions){
for (String permisson : permissions){
if (ContextCompat.checkSelfPermission(this,permisson)!=PERMISSION_GRANTED){
return false;
}
}
return true;
}
//为子类提供一个权限请求方法
public void onRequestPermission(int code,String... persissions){
ActivityCompat.requestPermissions(this,persissions,code);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case Constants.LINKMAN://Constants是我创建的一个类,来保存一些常亮,LINKMAN是标记
if (isGrantResults(grantResults)){
//获得授权后的操作
getLinkmanPermission();
}else {
//取消授权后的操作
Toast.makeText(this, "未授权", Toast.LENGTH_SHORT).show();
}
break;
default:break;
}
}
private boolean isGrantResults(int[] grantResults) {
for (int i = 0; i < grantResults.length; i++) {
if (grantResults[i] != PackageManager.PERMISSION_GRANTED){
return false;
}
}
return true;
}
/**
* 在这个方法里实现的话是表示每个页面访问的结果一样,
* 也可以什么都不写,让子类去实现,子类也可以不实现,
* 每个子类实现的话,表示那个页面要单独操作,
* 最终的操作结果以子类为主
*
* 获得联系人的权限
*/
public void getLinkmanPermission(){
}
}
第二步:Activity中实现。
public class MainActivity extends BaseActivity implements View.OnClickListener {
private Button mPersonPhone;
String[] mPermissionList = new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
mPersonPhone = (Button) findViewById(R.id.phone_person);
mPersonPhone.setOnClickListener(this);
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.phone_person:
getLinkman();
break;
default:
break;
}
}
/**
* 当点击后触发的方法
*/
@RequiresApi(api = Build.VERSION_CODES.M)
public void getLinkman() {
if (hasPermission(mPermissionList)) {
//获得权限后调取基类中的实现方法
getLinkmanPermission();
} else {
onRequestPermission(Constants.LINKMAN, mPermissionList);
}
}
/**
* 这里不实现的话,默认执行基类中的方法
* 实现的话,单独操作
*/
@Override
public void getLinkmanPermission() {
Toast.makeText(this, "成功授权", Toast.LENGTH_SHORT).show();
}
}
第三步:在AndroidManifest.xml中添加相应的权限。