我创建了一个带有按钮的应用程序,可以打开和关闭飞行模式。打开飞机模式时工作正常。但奇怪的是,飞机模式似乎在切换时保持不变。
如果我在关闭后检查手机设置,则表示飞机模式已关闭。但飞机模式图标仍然显示在手机的顶部栏中,按住手机的电源按钮显示飞机模式仍然开启。
不知道为什么设置在显示时会显示为关闭状态?
这是我用来关闭它的代码 - 我已经调试了,它肯定会打到这个。 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都是一个私有布尔值,用于存储飞行模式的状态。
我可以在这里做些蠢事,还是检查这个设置有些不可靠?
答案 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)。其他帖子中的代码应该可以正常工作。