0

アプリで無効にする必要があります。そのために、これらのインテントフィルターを使用しまし、それらは私のために使用しましたAIRPLANE MODEDATE TIME SETTINGSnoneworks

        <uses-permission android:name="android.permission.WRITE_SETTINGS" />

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.HOME" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter>
           <action android:name="android.settings.AIRPLANE_MODE_SETTINGS" />
           <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

        <intent-filter>
           <action android:name="android.settings.DATE_SETTINGS" />
           <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

しかし、以前は以下を使用して正常に無効にしました Settingsintent-filter

        <intent-filter >
            <action android:name="android.settings.SETTINGS" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
4

2 に答える 2

4

バージョン 4.2 以降では、機内モードをプログラムで制御することはできません。

ユーザーがルート化されたデバイスを持っている場合にのみ、これを行うことができます。

API DOC に書かれているとおり:

「Settings.System で定義された一部のデバイス設定は現在read-onlyです。アプリが に移動した Settings.System で定義された設定への変更を書き込もうとするとSettings.Global、書き込み操作は で実行されている場合はサイレントに失敗します。とAndroid 4.2の値が未満の場合、アプリは で実行されている場合に移動した設定​​を変更できません。」android:targetSdkVersionandroid:minSdkVersion17Settings.GlobalAndroid 4.2

于 2014-10-21T08:01:07.557 に答える
2

TLDR: そうしないでください。

ユーザーが機内モードを有効にできなかった場合にどうなるかを考えてください。
重要なシステム設定をアプリから変更することはできません。

私はお勧め:

  1. 機内モードが無効になっているかどうかを確認します
  2. 有効にすると、「このアプリは機内モードでは動作しません。システム設定アプリを開きますか?」というメッセージが表示されます。「はい/キャンセル」ダイアログ付き
  3. アプリを閉じるか、システム設定アプリを開きます

編集: 次のようになります:

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private void checkAirplaneMode() {
    int mode;
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        Log.v(TAG, "work with new api.");
        mode = Settings.Global.getInt(getActivity().getContentResolver(),
                Settings.Global.AIRPLANE_MODE_ON, 0);
    } else {
        Log.v(TAG, "work with old api.");
        mode = Settings.System.getInt(getActivity().getContentResolver(),
                Settings.System.AIRPLANE_MODE_ON, 0);
    }
    Log.v(TAG, "airplane mode: " + mode);

    if(mode == 1 /* airplane mode is on */) {
        new AlertDialog.Builder(getActivity()).setTitle("Sorry!")
                .setMessage("This app doesn't work with Airplane mode.\n"
                        + "Please disable Airplane mode.\n")
                .setPositiveButton("Open Settings", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        startActivity(new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS));
                        getActivity().finish();
                    }
                })
                .setNegativeButton("Close app", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        getActivity().finish();
                    }
                })
                .show();
    }
}

ここにポイントがあります。

  • 新しいデバイスBuild.VERSION.SDK_INTで使用する場合はオンにします。Settings.Global機内モードはこちらに移動。
  • mode == 1 の場合、デバイスは機内モードです。
  • 機内モード設定を開く
    startActivity(new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS));
于 2014-10-21T08:14:47.570 に答える