设置飞行模式并不完全有效

时间:2011-08-17 00:24:58

标签: android

我已经编写了以下代码,将手机设置为飞行模式以节省电量。这些设备被用作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;
    }
}

1 个答案:

答案 0 :(得分:4)

经典位扭曲错误。广播意图中的额外数据参数需要为真/假,而不是1/0。哎!

    intent.putExtra("state", true);  //Not 1!!

另一部手机没有工作。现在两者都这样做。