2011-08-17 20 views
1

電力を節約するために電話機を飛行機モードに設定するためのコードを以下に書いています。これらのデバイスは、インドネシアの村のいくつかのセンサーからのデータを中継するためにWiFi-Hotspotとして使用されています。センサーは同時にデータを送信するので、飛行機モードから真夜中に5分間出て飛行機モードに再び入る必要があります。飛行機モードの設定が完全​​に機能しない

問題は、携帯電話の電源が切れていないことと飛行機のアイコンが表示されないことです。電話機はairplane_modeをオンにしていると報告しますが、電話をかけることはできます。市場の他のウィジェットはうまくいくとは思われません。私は「飛行機モードWi-Fiツール」を試しました。飛行機のアイコンを表示させたり、セルラジオを無効にすることもできません。 LogCatを見て、飛行機モードに行くためにデバイス設定を使用しているとき、私ははるかにプログラムから試すときよりも起こっていることがわかります。

ドローイングでプログラムを読み込むと、このコードは期待どおりに動作します。 AIRPLANE_MODE_RADIOScell, bluetooth, wifiに設定されます。

-Froyo 2.2ビルドFROYO.UYJP2 -Froyo 2.2.1ビルドFROYO.UYJPE

興味深いサイドノート:

問題のあるデバイスは、サムスンギャラクシー5で、I5500はでテストIプログラムであれば飛行機モードを設定してからデバイスの電源を切ると、全航空機モードで起動し、着信を拒否します。

他のデバイスでも同様の話がありますか?セルのみをオフにする方法はありますか?

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

飛行機モードを設定してから電話機を再起動するといいですか?これはデバイス特有のものですが、回避するだけでそれだけです!あなたは、携帯電話が再びオンになった後であなたのアプリを起動するブロードキャストレシーバーを持つことができます。 – Blundell

+0

正しい。ただし、デバイスは無人です。設定された時間に電源が供給されていない場所からデータを中継します。大きなバッテリーや安い太陽電池があります。定期的に電源を入れるようにデバイスを設定することは可能ですか?私は、USBを介して電話を開始し、停止するために10分/日の電力を供給することが可能かもしれないと思っていた。しかし、動作しません。いずれにせよ、私は自分の問題を考え出した。答えを参照してください。 –

答えて

4

クラシックビットツイスターエラーです。ブロードキャストインテントの余分なデータ引数は、1/0ではなく、真/偽である必要がありました。うん!

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

1つの電話機が別の電話機で動作しませんでした。今はどちらもそうです。

+0

ああ、ありがとう!他のすべての質問には間違いがあり、それはintではなくブール値でなければなりません! – user705142

関連する問題