項目中很多操作需要事先進行危險權限的判斷和擷取,本人在Android項目開發中封裝了一個擷取Android6.0以上系統危險權限的擷取的方法,希望能給大家帶來幫助。
首先定義一個接口,裡面有兩個方法。
public interface AccreditListener {
void onAccreditSucceed(); //權限擷取成功
void onAccreditFailure(); //權限擷取失敗
}
然後,定義一個activity基類,可供需要工程中的activity繼承。
public class AppBaseActivity extends AppCompatActivity {
public int mRequestCode;
public int mPermissionRequestCount;
private AccreditListener mAccreditListener;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}
/**
* android6.0權限處理
*
* @param context
* @param permissionNames
* @param requestCode
*/
public void requestPermission(Context context, String[] permissionNames, int requestCode, AccreditListener accreditListener) {
if (permissionNames == null || permissionNames.length < ) {
return;
}
mRequestCode = requestCode;
mPermissionRequestCount = permissionNames.length;
mAccreditListener = accreditListener;
boolean isPermitted = true;
for (String permissionName : permissionNames) {
if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(context, permissionName)) {
isPermitted = false;
}
}
if (isPermitted) {
mAccreditListener.onAccreditSucceed();
} else {
ActivityCompat.requestPermissions((Activity) context, permissionNames, requestCode);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == mRequestCode && mPermissionRequestCount > ) {
boolean isPermitted = true;
for (int i = ; i < mPermissionRequestCount; i++) {
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
isPermitted = false;
}
}
if (isPermitted) {
mAccreditListener.onAccreditSucceed();
} else {
mAccreditListener.onAccreditFailure();
}
}
}
後面可以在需要的地方随意調用了,比如:
mMicrophone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
requestPermission(
ContactSearchActivity.this,
new String[]{
Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE},
, new AccreditListener() {
@Override
public void onAccreditSucceed() {
Log.i(TAG,"權限擷取成功!");
}
@Override
public void onAccreditFailure() {
Log.i(TAG,"權限擷取失敗!");
}
});
}
});