android - जेली बीन में हवाई जहाज मोड



reflection android-ndk (1)

4.2.2 के रूप में आप हवाई जहाज मोड को टॉगल नहीं कर सकते क्योंकि यह केवल-पढ़ने के लिए है

आपके पास दो विकल्प हैं

  1. अपने आवेदन को एक System एप्लिकेशन बनाएं अर्थात् किसी फोन को रूट करें, अपने एपीके को /system/app दबाएं और वहां से इंस्टॉल करें। यह आपको हवाई जहाज मोड को चालू करने में सक्षम करेगा।
  2. एंड्रॉइड सिस्टम फ़ंक्शन कॉल को पकड़ने के लिए Reflection का उपयोग करें जो हवाई जहाज मोड को टॉगल करता है।

आपको एक्सपोजर एपीआई प्राप्त करने के लिए परावर्तन का उपयोग कैसे करें, इसके बारे में कोड नमूने मिलेंगी अन्यथा एसडीके के माध्यम से डेवलपर को उजागर नहीं किया जाएगा।

मैं एंड्रॉइड 4.2.2 के साथ नेक्सस 4 में हवाई जहाज मोड सेट करने की कोशिश कर रहा हूं। मैं जानता हूं कि यह संभव नहीं है क्योंकि एयरलएएलएनएमएएमडीडीओओओ को ग्लोबल सिस्टम सेटिंग्स में ले जाया गया था और यह सिर्फ पढ़ने का विकल्प है I

क्या ऐसा कुछ करने का कोई दूसरा तरीका है, मेरा मतलब रेडियो को अक्षम करना है? मैं ब्लूटूथ, वाईफ़ाई और इंटरनेट कनेक्शन को अक्षम कर सकता हूं, लेकिन फोन कॉल नेटवर्क अभी भी सक्रिय है।

पूरी तरह से नेटवर्क को अक्षम करने के लिए एनडीके के साथ एक पुस्तकालय बनाना संभव है?

संपादित करें : मैंने इस विधि को बनाने के लिए 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); हूं। Settings.System.putString(resolver, name, value); JELLY_BEAN_MR1 से अधिक लेकिन, ज़ाहिर है, मुझे JELLY_BEAN_MR1 मिल रहा है क्योंकि मेरा ऐप सिस्टम एप नहीं है यह ट्रेस है:

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"/> use <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/> उपयोग <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/> हूं <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/> मुझे त्रुटि मिलती है Permission is only granted to system apps मैं एसडीके स्रोतों की जांच कर रहा था (ट्रेस से फाइलों में) इस अनुमति के बिना हवाई जहाज मोड सेट करने का एक तरीका खोजने के लिए, लेकिन मुझे कोई सफलता नहीं मिली।





android-4.2-jelly-bean