Android动态权限申请
最近接到公司对相关产品进行适配优化的任务,其中很重要的一点就是Android 6.0以上版本的动态权限申请,故记录下解决方法,若有不足望指出。
危险的权限(需要申请)
动态权限封装(父类Activity)
BaseActivity.java
public class BaseActivity extends AppCompatActivity {
private Context mContext;
private onPermissionCallbackInterface mListener;
private static final int CODE_FOR_PERMISSION = 100;
private AlertDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
}
/**
* 申请权限
* @param permissions
* @param listener
*/
public void onRequestPermission(String[] permissions, onPermissionCallbackInterface listener){
List<String> permissionList = new ArrayList<>();
this.mListener = listener;
//哪些权限需要申请
for (String permission : permissions){
if (ActivityCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED){
//权限没有申请 添加到要申请的权限列表中
permissionList.add(permission);
}
}
if (!permissionList.isEmpty()) {
ActivityCompat.requestPermissions(this, permissionList.toArray(new String[permissionList.size()]), CODE_FOR_PERMISSION);
} else {
//所有权限都同意了
mListener.onGranted();
}
}
/**
* 权限申请回调
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == CODE_FOR_PERMISSION) {
List<String> deniedPermissions = new ArrayList<>();
if (grantResults.length > 0) {
for (int i = 0; i < grantResults.length; i++) {
int grantResult = grantResults[i];
if (grantResult != PackageManager.PERMISSION_GRANTED) {
deniedPermissions.add(permission