我在这里找到了很多例子,但没有人适合我……我不明白出了什么问题。
我需要的是在我的应用程序中输入“飞行模式”,然后搜索一个完整的示例。
我所做的是
1.在清单中请求权限(我已经看到我需要“WRITE_SETTINGS”权限)
<uses-permission-sdk-m android:name="android.permission.WRITE_SETTINGS" />
2.在代码中,当我想更改飞行模式时,我检查权限
private void setAirplaneMode() {
boolean permission;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
permission = Settings.System.canWrite(this);
} else {
permission = ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_SETTINGS) == PackageManager.PERMISSION_GRANTED;
}
if (permission) {
//here I go to activate the airplane mode
setAirplaneModeIntent(true);
} else {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.WRITE_SETTINGS)) {
//I need to explain why I want permission
//TODO
} else {
ActivityCompat.requestPermissions(this, new String[] android.Manifest.permission.WRITE_SETTINGS}, MY_PERMISSION_REQUEST_WRITE_SETTINGS);
}
}
3.我覆盖了“onRequestPermissionsResult”
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResult) {
switch (requestCode) {
case MY_PERMISSION_REQUEST_WRITE_SETTINGS: {
if( grantResult.length > 0 &&
grantResult[0] == PackageManager.PERMISSION_GRANTED) {
setAirplaneModeIntent(true);
}
}
}
}
4.在“setAirplaneModeIntent”我设置飞行模式
private void setAirplaneModeIntent(boolean activateAirplaneMode) {
Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON,
activateAirplaneMode ? 1 : 0);
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", activateAirplaneMode);
sendBroadcast(intent);
}
当我调试时,我输入了“ActivityCompat.requestPermissions”代码,但是当我到达“onRequestPermissionsResult”时,结果不是PackageManager.PERMISSION_GRANTED。
怎么了?
编辑
我解决了“requestPermissions”部分。对于“WRITE_SETTINGS”权限,您需要 ACTION_MANAGE_WRITE_SETTINGS 意图。
看这里:
- https://developer.android.com/reference/android/provider/Settings.html#ACTION_MANAGE_WRITE_SETTINGS
- https://developer.android.com/reference/android/Manifest.permission.html#WRITE_SETTINGS
- http://stackoverflow.com/questions/39224303/write-settings-permission-not-granted-marshmallow-android
无论如何,当我发送广播时,我在第 4 点遇到了错误。
如果我不发送广播,“Settings.System.putInt”命令似乎什么都不做。
有人可以帮助我吗?
编辑 2
我投降。我发现唯一可行的解决方案是以这种方式打开网络设置
Intent intentAirplaneMode = new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS);
intentAirplaneMode.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intentAirplaneMode);