1.SplashActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= 23) {//6.0才用動態權限
initPermission();
}
}
--------------------------------------------------------------------
//申請兩個權限,錄音和文件讀寫
//1、首先聲明一個數組permissions,將需要的權限都放在裏面
String[] permissions = new String[]{Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_EXTERNAL_STORAGE};
//2、創建一個mPermissionList,逐個判斷哪些權限未授予,未授予的權限存儲到mPerrrmissionList中
List<String> mPermissionList = new ArrayList<>();
private final int mRequestCode = 100;//權限請求碼
//權限判斷和申請
private void initPermission() {
mPermissionList.clear();//清空沒有通過的權限
//逐個判斷你要的權限是否已經通過
for (int i = 0; i < permissions.length; i++) {
if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
mPermissionList.add(permissions[i]);//添加還未授予的權限
}
}
//申請權限
if (mPermissionList.size() > 0) {//有權限沒有通過,需要申請
ActivityCompat.requestPermissions(this, permissions, mRequestCode);
}else{
//說明權限都已經通過
}
}
//請求權限後回調的方法
//參數: requestCode 是我們自己定義的權限請求碼
//參數: permissions 是我們請求的權限名稱數組
//參數: grantResults 是我們在彈出頁面後是否允許權限的標識數組,數組的長度對應的是權限名稱數組的長度,數組的數據0表示允許權限,-1表示我們點擊了禁止權限
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean hasPermissionDismiss = false;//有權限沒有通過
if (mRequestCode == requestCode) {
for (int i = 0; i < grantResults.length; i++) {
if (grantResults[i] == -1) {
hasPermissionDismiss = true;
}
}
//如果有權限沒有被允許
if (hasPermissionDismiss) {
showPermissionDialog();//跳轉到系統設置權限頁面,或者直接關閉頁面,不讓他繼續訪問
}else{
//全部權限通過,進行下一步操作
}
}
}
--------------------------------------------------------------------
private void showPermissionDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(SplashActivity.this);
builder.setTitle("權限設置");
builder.setMessage("是否開啓權限?");
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
goIntentSetting();
finish();
}
});
builder.setNeutralButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
builder.show();
}
--------------------------------------------------------------------
private void goIntentSetting() {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", SplashActivity.this.getPackageName(), null);
intent.setData(uri);
try {
SplashActivity.this.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}