8

Android 4.2.2 を搭載した Nexus 4 で機内モードを設定しようとしています。AIRPLANE_MODE_ON がグローバル システム設定に移動されたため、それが不可能であることはわかっています。これは単なる読み取りオプションです。

同様のことを行う他の方法はありますか? つまり、ラジオを無効にしますか? Bluetooth、wifi、インターネット接続を無効にできますが、通話ネットワークはまだアクティブです。

NDKを使用してライブラリを作成し、ネットワークを完全に無効にすることはできますか?

編集:私はjava.lang.reflectこのメソッドを作成してみました:

@SuppressLint("NewApi")
@SuppressWarnings("rawtypes")
private boolean putStringAirplaneMode() throws ClassNotFoundException,
        NoSuchMethodException, IllegalArgumentException,
        IllegalAccessException, InvocationTargetException {

    ContentResolver resolver = context.getContentResolver();
    String name = Settings.Global.AIRPLANE_MODE_ON;
    String value = (isEnabled() ? "1" : "0");
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        Log.v("AirplaneBatterySaver",
                "Using reflection to change airplane mode");
        // For JELLY_BEAN_MR1 use reflection. TODO test if works reflection
        Class SystemProperties = android.provider.Settings.Global.class;

        Class[] parameterTypes = new Class[3];
        parameterTypes[0] = ContentResolver.class;
        parameterTypes[1] = String.class;
        parameterTypes[2] = String.class;

        @SuppressWarnings("unchecked")
        Method method = SystemProperties.getMethod("putString",
                parameterTypes);

        method.setAccessible(true);
        return (Boolean) method.invoke(new Object(), resolver, name, value);
        // return Settings.Global.putString(resolver, name, value);

    } else {
        Log.v("AirplaneBatterySaver",
                "Using Settings.System to change airplane mode");
        return Settings.System.putString(resolver, name, value);
    }
}

ご覧のとおり、メソッドを置き換えますSettings.System.putString(resolver, name, value);JELLY_BEAN_MR1、もちろん、SecurityException私のアプリはシステム アプリではないため、取得しています。これはトレースです:

Caused by: java.lang.SecurityException: Permission denial: writing to secure 
    settings requires android.permission.WRITE_SECURE_SETTINGS
at android.os.Parcel.readException(Parcel.java:1425)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
at android.content.ContentProviderProxy.call(ContentProviderNative.java:574)
at android.provider.Settings$NameValueCache.putStringForUser(Settings.java:777)
at android.provider.Settings$Global.putStringForUser(Settings.java:5421)
at android.provider.Settings$Global.putString(Settings.java:5411)

使用する<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>と、エラーが発生しますPermission is only granted to system apps。SDK ソース (トレースからのファイル内) をチェックして、この許可なしで機内モードを設定する方法を見つけようとしましたが、成功しませんでした。

4

1 に答える 1