无法关闭飞行模式

时间:2012-06-07 21:17:26

标签: android mode airplane

我创建了一个带有按钮的应用程序,可以打开和关闭飞行模式。打开飞机模式时工作正常。但奇怪的是,飞机模式似乎在切换时保持不变。

如果我在关闭后检查手机设置,则表示飞机模式已关闭。但飞机模式图标仍然显示在手机的顶部栏中,按住手机的电源按钮显示飞机模式仍然开启。

不知道为什么设置在显示时会显示为关闭状态?

这是我用来关闭它的代码 - 我已经调试了,它肯定会打到这个。 mContext是我用来保存上下文的变量,它被传递到一个设置类,然后有一些方法可以关闭和打开飞机模式:

System.putInt(mContext.getContentResolver(),
android.provider.Settings.System.AIRPLANE_MODE_ON, 0);
this.airplaneOn = false;
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", 0);
mContext.sendBroadcast(intent);

这是我用来检查飞机模式状态的代码 -

public boolean isAirplaneOn() {
  int airplaneMode = 0;
  try {
    airplaneMode = System.getInt(mContext.getContentResolver(),
  android.provider.Settings.System.AIRPLANE_MODE_ON);
    } catch (SettingNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    if (airplaneMode == 1) {
        this.airplaneOn = true;
    } else {
        this.airplaneOn = false;
    }
    return airplaneOn;
}

在这两种情况下,this.airplaneOn都是一个私有布尔值,用于存储飞行模式的状态。

我可以在这里做些蠢事,还是检查这个设置有些不可靠?

2 个答案:

答案 0 :(得分:4)

我已成功完成以下代码:

public static boolean isFlightModeEnabled(Context context) {
    return Settings.System.getInt(context.getContentResolver(),
        Settings.System.AIRPLANE_MODE_ON, 0) == 1;
}

public static void toggleFlightMode(Context context) {
    boolean isEnabled = isFlightModeEnabled(context);

    Settings.System.putInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1);

    Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
    intent.putExtra("state", !isEnabled);
    context.sendBroadcast(intent);
}

我在代码和你的代码之间看到的唯一区别是你的putInt()你有硬编码0。

另外需要注意的是根据文档,ACTION_AIRPLANE_MODE_CHANGED

This is a protected intent that can only be sent by the system.

过去我没有遇到过这方面的问题,但也许你的设备更新,并且强制执行我已经取得成功的旧手机并没有强制执行。

答案 1 :(得分:1)

对您的意图使用布尔值而不是0/1,即:intent.putExtra(“state”,true)。其他帖子中的代码应该可以正常工作。