Android6.0中对权限做了修改,这样提高了安全性,同时也增加了代码量,如果每添加一项权限都询问开启,就会出现代码重复,所以我们可以把重复的代码进行简单的封装,用的时候直接拿来用就可以了。
方法很简单,不在说明了。
写一个BaseActivity.java类继承Activity(或者AppCompatActivity类):
public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } /* * 为子类提供一个权限检查方法 * @param permissions * @return * */ public boolean hasPermission(String... permissions){ for (String permission : permissions){ if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED){ return false; } } return true; } /* * 为子类提供一个权限请求方法 * @ code * @ permissions * */ public void requestPermission(int code, String... permissions) { ActivityCompat.requestPermissions(this,permissions,code); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case Constants.WRITE_EXTERNAL_CODE: doSDCarPermission(); break; case Constants.CALL_PHONE_CODE: doCallPhone(); break; } } /** * 打电话权限处理 * */ protected void doCallPhone() { } /** * 默认的写SD权限处理 * */ protected void doSDCarPermission() { }
MainActivity.java继承BaseActivity.java(需要请求开启权限的activity都可以继承BaseActivity.java)
public class MainActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //打电话,以打电话为例 private void callPhone() { if (hasPermission(Manifest.permission.CALL_PHONE)) { doCallPhone(); }else { requestPermission(Constants.CALL_PHONE_CODE,Manifest.permission.CALL_PHONE); } } /** * 子类实现具体的打电话逻辑 * */ @Override protected void doCallPhone() { Intent intent = new Intent(Intent.ACTION_CALL); Uri data = Uri.parse("tel:" + "要拨打的电话号码"); intent.setData(data); this.startActivity(intent); } /** * 具体业务逻辑的实现根据项目需求实现 * */ }
只写了一个打电话的权限申请,其他的根据需要编写。