【发布时间】:2011-08-17 00:24:58
【问题描述】:
我编写了下面的代码,将手机设置为飞行模式以节省电量。这些设备被用作 WiFi 热点,用于中继来自印度尼西亚一个村庄的一些传感器的数据。传感器同时发送它们的数据,所以我只需要在午夜离开飞行模式五分钟,然后重新进入飞行模式。
问题是蜂窝无线电没有关闭并且飞机图标没有出现。尽管电话报告其状态为飞机模式开启,但仍然可以调用它。市场上的其他小部件似乎也好不到哪里去。我试过“飞行模式 Wi-Fi 工具”。它也无法让飞机图标出现,也无法禁用手机收音机。在使用设备设置进入飞行模式时观看 LogCat 时,我可以看到发生的事情比从程序中尝试时要多得多。
如果我在 Droid 上加载我的程序,此代码将按预期工作。 AIRPLANE_MODE_RADIOS 设置为 cell, bluetooth, wifi。
违规设备是三星 Galaxy 5, I5500 测试:
-Froyo 2.2 构建 FROYO.UYJP2 -Froyo 2.2.1 构建 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;
}
}
【问题讨论】:
-
所以你说如果你设置飞行模式然后重启手机就可以了?这听起来特定于设备,解决方法就是这样做!你可以有一个广播接收器,它会在手机重新开机后启动你的应用程序。
-
正确。但是,该设备将无人看管。它将在设定的时间从没有电源的位置中继数据。我们将拥有大型电池或廉价的太阳能。是否可以将设备配置为定期上电?我在想有可能每天通过 USB 供电 10 分钟来启动和停止手机。虽然不起作用。无论如何,我发现了我的问题。见答案。
标签: android