2012-01-11 10 views
0

私は自分のアプリで飛行機モードを使用するためにtroubeを持っています。アプリは私のエミュレータではうまく動作しますが、私のAPKを試してみると本当の電話ではうまく動作しません。それをdesactivateするにAndroidで飛行機モードを使用するときの問題

Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 1); 
     // Post an intent to reload 
     Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); 
     // send a broadcast 
     //intent.putExtra("state", !isEnabled); 
     intent.putExtra("state", true); 
     sendBroadcast(intent); 

:ここ

は飛行機を活性化させるためのコードです

Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0); 
     // Post an intent to reload 
     Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); 
     // send a broadcast 
     intent.putExtra("state", false); 
     sendBroadcast(intent); 

私は私が意図(android doc)を作成することができないことを読んで私は飛行機を作ることができる人を見ました私は理解していないモード!

助けてくれてありがとう!

+0

あなたのマニフェストに ''がありますか? – Vladimir

+0

@Vlad:ありがとう。はい、私はすでにteのマニフェストにこの行を入れました;-)あなたの注意をお寄せいただきありがとうございます! – clement

+0

@clementあなたの全体的な目標が何であるかを説明してください。私は「これ」をすることはできません。あなたは「これ」をどういう意味ですか? – JoxTraex

答えて

0

あなたが述べたように、答えはドキュメントである:

「これはシステムによってのみ送信することができ、保護目的です。」

Intent Documentation Reference

エミュレータはセキュリティで保護されたデバイスではなく、あなたが正常に行うことができないだろうという(のようなファイルシステムを参照)あなたは物事を行うことができますので、それはエミュレータ上で動作する可能性があります。また、使用しようとしているAndroidのAPIレベルについては言及していませんでした。それが現在の何かであれば、Googleは制限を厳しくするかもしれない。

+0

私は静かなモードを置くことができるので、データ接続(3Gと無線LAN)を停止???私はこれを実行することはできますか? ありがとう – clement

+0

あなたは無線LANと3Gを無効にしようとしている場合は、以前は無線LAN(http://stackoverflow.com/questions/6197119/is-it-possible-to-disable-wireless-networking-using -the-android-sdk-or-ndk)と3G用(http://stackoverflow.com/questions/5337121/how-to-enable-disable-3g-data-service-in-android) – Noctuvigilus

+0

そしてコール/SMS? – clement

2

You CAN NOTは、システムレベルのインテントをブロードキャストします。これはアンドロイドの基準によって違法です。

インテントを送信しようとするのではなく、その特定のアクションをリッスンするようにブロードキャストレシーバを実装してから、変更するときにアプリケーションで処理するようにしてください。これははるかに良いアプローチだろう。 NOT飛行機モードを制御することを期待していますが、呼び出されたときにアプリが聴くことができます。飛行機モードであるかどうかを示すシステムデータベースからプロパティを取得することもできます。

もう一度これを制御しようとしないで、それを処理してください。

+0

ありがとうが、私は飛行機モードを扱うために放送受信機を使用することはできないのですが、それは不可能です。 飛行機ではなく、データ接続(3GとWi-Fiの両方)をオフにして電話を静かにすることができますか、サイレントモードでも同じ問題ですか? – clement

+0

あなたの目標は何ですか? – JoxTraex

+0

@clementあなたの目標は何ですか?私はあなたを助けることができます。 – JoxTraex

1

有効なAndroidアプリケーションとして、飛行機モードに電話を移動したり、無線を無効にしたり、音を消したり、そのようなものをオフにするなど、何をしようとしているのかはできません。

任意のアプリケーションがあなたの電話ラジオをオフにして、あなたが100万ドルを獲得したことを知らせるそのコールを見逃した場合、どのように感じるだろうと想像してください。

誰もが何をしようとしているのですか?アプリケーションとして飛行機モードに電話機を移動することを期待してはいけません。ユーザーだけがそれを行うことができます。

ユーザーが飛行機モードに変更した場合、システムはインテントをブロードキャストし、アプリケーションはそのインテントを捕捉してその上で行動する必要があります。これを実行することは、UIの変更を含むさまざまなことを意味します。

あなたが今日しようとしていることを何とか達成しようとしても、システムは警告なしで(明示的に内部API /インテントであるため)明日に変更でき、アプリケーションは機能しません。技術的には、あなたが手に持っているものを除いて他のどのデバイスでも機能しないかもしれません。あなたはAPI契約全体がうんざりだと知っています。

+0

しかし、シングルアプリケーションモードの場合、ルートデバイスを使用して「飛行機モード、無線を無効にする、音を消す、またはそのようなものをオフにする」ことは非常に重要です。それをする方法はありませんか? – ransh

0
public static void setWifiOn(Context context) { 
     WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    manager.setWifiEnabled(true); 
    } 

    public static boolean getAirplaneMode(Context context) { 
     try { 
     int airplaneModeSetting = Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON); 
     return airplaneModeSetting==1?true:false; 
    } catch (SettingNotFoundException e) { 
     return false; 
    } 
    } 
関連する問題