0

我必须禁用 AIRPLANE MODEDATE TIME SETTINGS在我的应用程序中,因为我使用了这些意图过滤器,但none它们works对我来说是

        <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 中所写:

read-only“一些由Settings.System定义Settings.GlobalAndroid 4.2设备设置android:targetSdkVersion现在android:minSdkVersion是低于17,您的应用程序无法修改Settings.Global运行时移动到的设置Android 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_INTSettings.Global用于较新的设备。飞行模式移至此处。
  • 如果 mode == 1,则设备处于飞行模式。
  • 打开飞行模式设置Activity by
    startActivity(new Intent(Settings.ACTION_AIRPLANE_MODE_SETTINGS));
于 2014-10-21T08:14:47.570 回答