Android में हवाई जहाज मोड टॉगल करें




mode airplane (7)

मुझसे कोई गलती हो गई क्य? यह काम नहीं कर रहा है।

public void airplane() {
    boolean isEnabled = Settings.System.getInt(this.getApplicationContext().getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1;
    Settings.System.putInt(context.getContentResolver(),Settings.System.AIRPLANE_MODE_ON,isEnabled ? 0 : 1);
    //Settings.System.putInt(this.getApplicationContext().getContentResolver(),Settings.System.AIRPLANE_MODE_ON,isEnabled ? 0 : 1);
    Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
}

सभी एपीआई संस्करणों के लिए काम करता है।

  • एपीआई <17 के लिए authomaticaly स्विच करें
  • API> = 17 के लिए उपयोगकर्ता क्रियाओं के लिए हवाई जहाज मोड की डिफ़ॉल्ट गतिविधि खोलें

कोई रूट नहीं, सिस्टम स्तर की अनुमति नहीं !

AndroidManifest.xml में अनुमति जोड़ें:

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

फिर:

@SuppressWarnings("deprecation")
    private void initAirplanemodeBtn() {
        airplanemodeButton = (ToggleButton) findViewById(R.id.airplanemode_btn);
        airplanemodeButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if (android.os.Build.VERSION.SDK_INT < 17) {
                    try {
                        // read the airplane mode setting
                        boolean isEnabled = Settings.System.getInt(
                                getContentResolver(),
                                Settings.System.AIRPLANE_MODE_ON, 0) == 1;

                        // toggle airplane mode
                        Settings.System.putInt(
                                getContentResolver(),
                                Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1);

                        // Post an intent to reload
                        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
                        intent.putExtra("state", !isEnabled);
                        sendBroadcast(intent);
                    } catch (ActivityNotFoundException e) {
                        Log.e(TAG, e.getMessage());
                    }
                } else {
                    try {
                        Intent intent = new Intent(android.provider.Settings.ACTION_AIRPLANE_MODE_SETTINGS);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);
                    } catch (ActivityNotFoundException e) {
                        try {
                            Intent intent = new Intent("android.settings.WIRELESS_SETTINGS");
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivity(intent);
                        } catch (ActivityNotFoundException ex) {
                            Toast.makeText(buttonView.getContext(), R.string.not_able_set_airplane, Toast.LENGTH_SHORT).show();
                        }
                    }
                }

            }
        });
    }

अगर आप इंटरनेट बंद करना चाहते हैं तो यह काम करेगा 17+ के लिए यह कामकाज मिला।

अनुमति

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

तरीका

@SuppressWarnings({ "unchecked", "rawtypes" })
private void setMobileDataEnabled(boolean state) {
    try {
        final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        final Class conmanClass = Class.forName(conman.getClass().getName());
        final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService");
        iConnectivityManagerField.setAccessible(true);
        final Object iConnectivityManager = iConnectivityManagerField.get(conman);
        final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
        final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
        setMobileDataEnabledMethod.setAccessible(true);
        setMobileDataEnabledMethod.invoke(iConnectivityManager, state);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

ध्यान दें, एंड्रॉइड 4.2 एपीआई के तहत दस्तावेज के रूप में (जोर जोड़ा गया):

नई वैश्विक सेटिंग्स

सेटिंग सेटिंग्स के साथ कई उपयोगकर्ताओं का समर्थन करने के लिए सिस्टम सेटिंग्स को अद्यतन किया गया है। Settings.Global । सेटिंग्स का यह संग्रह सेटिंग्स के समान है। सुरक्षित सेटिंग्स क्योंकि वे केवल पढ़ने के लिए हैं, लेकिन डिवाइस पर सभी उपयोगकर्ता रिक्त स्थान पर विश्व स्तर पर लागू होते हैं।

Settings.System या Settings.Secure से सुरक्षित कई सेटिंग्स को यहां स्थानांतरित कर दिया गया था। सुरक्षित। यदि आपका ऐप वर्तमान में Settings.System AIRPLANE_MODE_ON (जैसे कि AIRPLANE_MODE_ON ) में परिभाषित सेटिंग्स में परिवर्तन कर रहा है, तो आपको उम्मीद करनी चाहिए कि ऐसा करने से एंड्रॉइड 4.2 या उच्चतम वाले डिवाइस पर काम नहीं किया जाएगा यदि उन सेटिंग्स को सेटिंग्स में स्थानांतरित किया गया था। Settings.Global । आप सेटिंग.ग्लोबल में सेटिंग्स को पढ़ना जारी रख सकते हैं, लेकिन चूंकि सेटिंग्स को ऐप्स बदलने के लिए अब सुरक्षित नहीं माना जाता है, ऐसा करने का प्रयास चुपचाप विफल हो जाएगा और सिस्टम आपके ऐप को चलाने पर सिस्टम लॉग को चेतावनी देगा एंड्रॉइड 4.2 या उच्चतम।


मुझे लगता है कि "सेटिंग्स.System.AIRPLANE_MODE_ON" बहिष्कृत है, मैं इसका उपयोग कर रहा हूँ:

public class AirplaneModeService {
    public boolean run(Context context) {
        boolean isEnabled = isAirplaneModeOn(context);
        // Toggle airplane mode.
        setSettings(context, isEnabled?1:0);
        // Post an intent to reload.
        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        intent.putExtra("state", !isEnabled);
        context.sendBroadcast(intent);
        return true;
    }
    public static boolean isAirplaneModeOn(Context context) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
            return Settings.System.getInt(context.getContentResolver(), 
                    Settings.System.AIRPLANE_MODE_ON, 0) != 0;          
        } else {
            return Settings.Global.getInt(context.getContentResolver(), 
                    Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
        }       
    }
    public static void setSettings(Context context, int value) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
            Settings.System.putInt(
                      context.getContentResolver(),
                      Settings.System.AIRPLANE_MODE_ON, value);
        } else {
            Settings.Global.putInt(
                      context.getContentResolver(),
                      Settings.Global.AIRPLANE_MODE_ON, value);
        }       
    }
}

मुझे उम्मीद है कि यह किसी की मदद करेगा।


यहां प्रत्येक सेटिंग से पहले एंड्रॉइड.प्रोवाइडर का उपयोग करें:

public class MainActivity extends Activity implements OnClickListener {

    Button air;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        air = (Button) findViewById(R.id.button1);
        air.setOnClickListener(this);
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        // read the airplane mode setting
        boolean isEnabled = android.provider.Settings.System.getInt(
              getContentResolver(), 
              android.provider.Settings.System.AIRPLANE_MODE_ON, 0) == 1;

        // toggle airplane mode
        android.provider.Settings.System.putInt(
              getContentResolver(),
              android.provider.Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1);

        // Post an intent to reload
        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        intent.putExtra("state", !isEnabled);
        sendBroadcast(intent);

    }

}

लॉलीपॉप के बाद, आप नीचे विधि का उपयोग कर सकते हैं, लेकिन यह छुपा एपीआई है और आपके एप्लिकेशन को सिस्टम स्तर की अनुमति की आवश्यकता है

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

ConnectivityManager mgr =  (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
        mgr.setAirplaneMode(true); 

रूट रूट पर निम्नलिखित का उपयोग किया जा सकता है।

कमांडलाइन से, आप निम्नलिखित के साथ विमान मोड चालू / बंद टॉगल कर सकते हैं:

ON:
settings put global airplane_mode_on 1
am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true

OFF:
settings put global airplane_mode_on 0
am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false

यह एंड्रॉइड 4.4.2+ के साथ काम करता है





airplane