0

アプリで機内モードを使用するのに問題があります。アプリはエミュレーターでは問題なく動作しますが、apk を試すと実際の電話では動作しません。

飛行機をアクティブにするコードは次のとおりです。

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)、機内モードを作成できる人を見たのでわかりません!

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

4

4 に答える 4

2

システム レベルのインテントをブロードキャストすることはできません。これはアンドロイドの基準では違法です。

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

繰り返しますが、それを制御しようとすることに集中するのではなく、ただ処理してください。

于 2012-01-18T07:23:03.520 に答える
1

合法的な Android アプリケーションとして、携帯電話を機内モードにする、ラジオを無効にする、サウンドをオフにするなど、何をしようとしても実行できません。

任意のアプリケーションが携帯電話のラジオをオフにし、100 万ドルを獲得したことを知らせる電話に出られなかった場合、ユーザーがどのように感じるか想像してみてください。

したがって、誰もが到達しようとしているのは、アプリケーションとして、電話を機内モードに移行することを期待すべきではないということです。それができるのはユーザーだけです。

ユーザーが機内モードに切り替えると、システムはインテントをブロードキャストし、アプリケーションはそのブロードキャスト インテントをキャッチして、それに基づいて動作する必要があります。それに対応するということは、UI の変更など、さまざまなことを意味します。

今日やろうとしていることを達成する方法を見つけたとしても、システムは警告なしに明日変更される可能性があり (これは内部 API/インテントであるため)、アプリケーションは機能しません。技術的には、手に持っているデバイス以外では機能しない可能性があります.APIコントラクト全体がくだらないことを知っています.

于 2012-01-20T09:22:21.127 に答える
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;
    }
  }
于 2012-07-09T10:15:44.627 に答える
0

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

「これは、システムによってのみ送信できる保護された意図です。」

インテント ドキュメント リファレンス

エミュレーターは安全なデバイスではなく、通常は実行できないこと (ファイル システムの参照など) を実行できるため、エミュレーターで動作する可能性があります。また、使用しようとしている Android の API レベルについても言及していません。それが最新のものである場合、Google は制限を強化している可能性があります。

于 2012-01-18T06:57:42.477 に答える