首先說下申請全部過程以及需要申請的權限
權限組 (如果你的項目中使用了以下權限,就必須要動態申請)
android.permission-group.CALENDAR(日曆數據) |
|
android.permission-group.CAMERA(相機) |
|
android.permission-group.CONTACTS(聯繫人) |
|
android.permission-group.LOCATION(位置) |
|
android.permission-group.MICROPHONE(麥克風) |
|
android.permission-group.PHONE(電話) |
|
android.permission-group.SENSORS(傳感器) |
|
android.permission-group.SMS(短信) |
|
android.permission-group.STORAGE(存儲) |
|
以下是我封裝了檢測、申請權限的方法 PermissionUtil
//檢查所需要的權限
public static boolean checkPermissionAllGranted(Activity activity, String[] permissions) {
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {
// 只要有一個權限沒有被授予, 則直接返回 false
return false;
}
}
return true;
}
//申請所需要的權限
public static void requestAllPerssion(Activity activity, String[] permissions, int code) {
ActivityCompat.requestPermissions(activity, permissions, code);
}
/**
* 打開 APP 的權限設置
*/
public static void openAppDetails(final Activity activity) {
AlertDialog.Builder builder;
builder = new AlertDialog.Builder(activity);
builder.setMessage("請到設置中開啓相應權限,否則部分功能無正常使用");
builder.setPositiveButton("去手動授權", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + activity.getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
activity.startActivity(intent);
}
});
builder.setNegativeButton("取消", null);
builder.show();
}
在代碼中的使用
public class LauncherActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_launcher); boolean isAllGranted = PermissionUtil.checkPermissionAllGranted(this, new String[]{Manifest.permission.READ_PHONE_STATE}); // 如果這個權限全都擁有, 則直接執行備份代碼 if (isAllGranted) { initView(); } else { PermissonUtil.requestAllPerssion(this, new String[]{Manifest.permission.READ_PHONE_STATE}, code); } }
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case code:
boolean isAllGranted = true;
// 判斷是否所有的權限都已經授予了
for (int grant : grantResults) {
if (grant != PackageManager.PERMISSION_GRANTED) {
isAllGranted = false;
break;
}
}
if (isAllGranted) {
} else {
//如果沒有權限就打開app權限設置界面
PermissionUtil.openAppDetails(this);
}
default:
break;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}