Android 安卓飞机许可不';无法正常工作-完整示例?

Android 安卓飞机许可不';无法正常工作-完整示例?,android,permissions,android-permissions,airplane,Android,Permissions,Android Permissions,Airplane,我在这里找到了很多例子,但没有人适合我……我不明白怎么回事。我需要的是在我的应用程序中输入“飞行模式”,然后搜索完整的例子。 我所做的是 1.在清单中请求权限(我看到我需要“写入设置”权限) 2.在代码中,当我想更改飞行模式时,我会检查权限 private void setAirplaneMode() { boolean permission; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { pe


我在这里找到了很多例子,但没有人适合我……我不明白怎么回事。
我需要的是在我的应用程序中输入“飞行模式”,然后搜索完整的例子。
我所做的是
1.在清单中请求权限(我看到我需要“写入设置”权限)



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”


4.在“SetAirPlaneModeContent”中,我设置了飞行模式

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。
发生了什么?

编辑
我解决了“请求权限”部分。对于“写入设置”权限,您需要执行“管理写入设置”操作。
请参见此处:

  • 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);
    

    简言之,谷歌登录是否被飞机模式阻止?唯一的方法是要求用户启用此模式?
    Intent intentAirplaneMode = new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS);
    intentAirplaneMode.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intentAirplaneMode);