Android6.0之後要修改設定中的系統開關的方法
阿新 • • 發佈:2019-02-03
Android6.0之後系統對於安全性問題做了很多設定,如:想修改系統 的橫豎屏,螢幕亮度等等和系統設定相關的問題,在網上收集到的一些請求許可權的方式是沒有用的,對於請求需要WRITE_SETTINGS許可權的需要用以下方式來實現:
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse("package:" + mContext.getPackageName()));
startActivityForResult(intent, 1 );
跳轉到系統設定頁去開啟,但是在此之前,我們的程式碼中要做一些判斷,如下:
public boolean haveStoragePermissions() {
//判斷手機中android版本是不是6.0以上,如果是則需要請求許可權,否則不要
if (Build.VERSION.SDK_INT >= 23) {
if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_SETTINGS)
== PackageManager.PERMISSION_GRANTED) {//檢查是否有此許可權,有則返回true
return true;
} else {
//跳轉至相應的設定介面進行設定
return false;
}
}
else { //permission is automatically granted on sdk<23 upon installation
return true;
}
}
設定完返回的時候判斷WRITE_SETTINGS許可權是否設定成功,成功則做響應的操作:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if (Settings.System.canWrite(mContext)) {//判斷是否設定成功,返回true則設定成功
//在此做響應的操作
}
}
}
跳轉至設定介面之前先彈出dialog詢問使用者是否進行設定,具體程式碼如下:
public boolean haveStoragePermissions() {
//判斷手機中android版本是不是6.0以上,如果是則需要請求許可權,否則不要
if (Build.VERSION.SDK_INT >= 23) {
if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_SETTINGS)
== PackageManager.PERMISSION_GRANTED) {//檢查是否有此許可權,有則返回true
return true;
} else {
//跳轉至相應的設定介面進行設定
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle(“設定許可權”);
dialog.setMessage(“此功能需要開啟系統許可權,是否開啟?”);
dialog.setNegativeButton(“取消”, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
dialog.setPositiveButton(“確定”, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse("package:" + mContext.getPackageName()));
startActivityForResult(intent, 1 );
}
});
dialog.create().show();
return false;
}
}
else { //permission is automatically granted on sdk<23 upon installation
return true;
}
}
另一個特殊許可權請求SYSTEM_ALERT_WINDOW(設定懸浮窗,進行一些黑科技):
其他就不多寫了,只寫主要的,跳轉值系統設定介面程式碼:
new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, 2);
Activity返回後主要判斷是否開啟的方法如下:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 2) {
if (Settings.canDrawOverlays(this)) { //返回true則許可權已經開啟
//開啟許可權之後可以做的操作
}
}
}