我已经编写了以下代码,将手机设置为飞行模式以节省电量。这些设备被用作WiFi-Hotspot,用于传输印度尼西亚一个村庄的一些传感器的数据。传感器同时发送数据,因此我只需要在午夜离开飞机模式五分钟,然后重新进入飞行模式。
问题是蜂窝收音机没有关闭,飞机图标没有出现。虽然手机将其状态报告为airplane_mode,但仍可以调用它。市场上的其他小部件似乎并没有更好的表现。我试过“飞机模式Wi-Fi工具”。它也无法显示飞机图标或禁用单元格无线电。在使用设备设置进入飞行模式时观看LogCat时,我可以看到比从程序中尝试更多的事情。
如果我在Droid上加载我的程序,此代码按预期工作。 AIRPLANE_MODE_RADIOS
设置为cell, bluetooth, wifi
。
违规设备是三星Galaxy 5,I5500经过测试:
-Froyo 2.2 build FROYO.UYJP2 -Froyo 2.2.1 build FROYO.UYJPE
一个有趣的旁注:如果我以编程方式设置飞行模式然后重启设备,它将以全飞机模式启动,拒绝来电等。
其他人是否有与此设备或其他设备类似的故事?有没有办法专门关闭细胞?
public static void setAirplaneMode(Context context, boolean status) {
boolean isAM = Settings.System.getInt(context.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0) != 0;
String radios = Settings.System.getString(context.getContentResolver(),
Settings.System.AIRPLANE_MODE_RADIOS);
//This line is reporting all radios affected but annunciator does not seem to think so. Does not show airplane
Wake.logger("Airplane mode is: " + isAM + " changing to " + status + " For radios: " + radios, false);
// It appears Airplane mode should only be toggled. Don't reset to
// current state.
if (isAM && !status) {
Settings.System.putInt(context.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0);
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", 0);
context.sendBroadcast(intent);
return;
}
if (!isAM && status) {
Settings.System.putInt(context.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 1);
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", 1);
context.sendBroadcast(intent);
return;
}
}
答案 0 :(得分:4)
经典位扭曲错误。广播意图中的额外数据参数需要为真/假,而不是1/0。哎!
intent.putExtra("state", true); //Not 1!!
另一部手机没有工作。现在两者都这样做。