java - Android पर हवाई जहाज मोड का पता कैसे लगा सकता है?




airplane (8)

मेरे पास मेरे एप्लिकेशन में कोड है जो यह पता लगाता है कि वाई-फाई सक्रिय रूप से कनेक्ट है या नहीं। यदि विमान मोड सक्षम है तो वह कोड RuntimeException को ट्रिगर करता है। वैसे भी इस मोड में जब एक अलग त्रुटि संदेश प्रदर्शित करना चाहते हैं। एक एंड्रॉइड डिवाइस हवाई जहाज मोड में है या नहीं, तो मैं भरोसेमंद तरीके से कैसे पता लगा सकता हूं?


स्टेटिक ब्रॉडकास्ट रिसीवर

प्रकटीकरण कोड:

<receiver android:name=".airplanemodecheck" android:enabled="true"
 android:exported="true">
  <intent-filter>
     <action android:name="android.intent.action.AIRPLANE_MODE"></action>
  </intent-filter>
</receiver>

जावा कोड: प्रसारण रिसीवर जावा फ़ाइल

if(Settings.System.getInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0)== 0)
{
  Toast.makeText(context, "AIRPLANE MODE Off", Toast.LENGTH_SHORT).show();
}
else
{
 Toast.makeText(context, "AIRPLANE MODE On", Toast.LENGTH_SHORT).show();
}

या

गतिशील प्रसारण रिसीवर

जावा कोड: गतिविधि जावा फ़ाइल

एप्लिकेशन पर ब्रॉडकास्ट रिसीवर को पंजीकृत करें, अगर आप इंटरनेट पर पहुंचने पर चेक एयरप्लेन मोड की तरह अपनी गतिविधि को खोलते हैं तो केवल तभी कार्रवाई करते हैं जब आप केवल कार्रवाई करते हैं।

airplanemodecheck reciver;

@Override
protected void onResume() {
   super.onResume();
   IntentFilter intentFilter = new IntentFilter();
   intentFilter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
   reciver = new airplanemodecheck();
   registerReceiver(reciver, intentFilter);
}

@Override
protected void onStop() {
  super.onStop();
  unregisterReceiver(reciver);
}

जावा कोड: प्रसारण रिसीवर जावा फ़ाइल

if(Settings.System.getInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0)== 0)
{
  Toast.makeText(context, "AIRPLANE MODE Off", Toast.LENGTH_SHORT).show();
}
else
{
 Toast.makeText(context, "AIRPLANE MODE On", Toast.LENGTH_SHORT).show();
}

अवमूल्यन शिकायत से छुटकारा पाने के लिए (API17 + को लक्षित करते समय और पिछड़े संगतता के बारे में बहुत अधिक परवाह नहीं करते), किसी को Settings.Global.AIRPLANE_MODE_ON .Global.AIRPLANE_MODE_ON से तुलना करना होगा:

/** 
 * @param Context context
 * @return boolean
**/
private static boolean isAirplaneModeOn(Context context) {
   return Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) != 0);
}

कम एपीआई पर विचार करते समय:

/** 
 * @param Context context
 * @return boolean
**/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@SuppressWarnings({ "deprecation" })
private static boolean isAirplaneModeOn(Context context) {
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1){
        /* API 17 and above */
        return Settings.Global.getInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
    } else {
        /* below */
        return Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) != 0;
    }
}

एपीआई स्तर से - 17

/**
     * Gets the state of Airplane Mode.
     *
     * @param context
     * @return true if enabled.
     */
    private static boolean isAirplaneModeOn(Context context) {

        return Settings.Global.getInt(context.getContentResolver(),
                Settings.Global.AIRPLANE_MODE_ON, 0) != 0;

    }

एयरप्लेन मोड BroadcastReceiver रिसीवर (@ सैक्सोस उत्तर) को पंजीकृत करते समय मुझे लगता है कि Settings.Global कॉल करने से बचने के लिए Intent Extras से तुरंत एयरलाइन मोड सेटिंग की स्थिति प्राप्त करने के लिए बहुत समझदारी होती है। ग्लोबल या Settings.System :

@Override
public void onReceive(Context context, Intent intent) {

    boolean isAirplaneModeOn = intent.getBooleanExtra("state", false);
    if(isAirplaneModeOn){

       // handle Airplane Mode on
    } else {
       // handle Airplane Mode off
    }
}

ओरेओ में कृपया एयरलाइन मोड ब्रॉडकास्ट रिसीवर का उपयोग न करें। यह एक निहित इरादा है। इसे हटा दिया गया है। वर्तमान अपवाद सूची यहां दी गई है। वर्तमान में सूची में नहीं है इसलिए डेटा प्राप्त करने में विफल होना चाहिए। इसे मृत मानो।

जैसा कि ऊपर दिए गए किसी अन्य उपयोगकर्ता द्वारा निम्न कोड का उपयोग किया गया है:

 @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    @SuppressWarnings({ "deprecation" })
    public static boolean isAirplaneModeOn(Context context) {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1){
        /* API 17 and above */
            return Settings.Global.getInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
        } else {
        /* below */
            return Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) != 0;
        }
    }

और अगर आप मतदान करना नहीं चाहते हैं तो हवाई जहाज मोड सक्रिय है या नहीं, तो आप SERVICE_STATE इरादे के लिए ब्रॉडकास्ट रिसीवर पंजीकृत कर सकते हैं और उस पर प्रतिक्रिया दे सकते हैं।

या तो आपके आवेदन में प्रकट करें:

<receiver android:enabled="true" android:name=".ConnectivityReceiver">
    <intent-filter>
        <action android:name="android.intent.action.AIRPLANE_MODE"/>
    </intent-filter>
</receiver>

या प्रोग्रामेटिक रूप से:

IntentFilter intentFilter = new IntentFilter("android.intent.action.AIRPLANE_MODE");

BroadcastReceiver receiver = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
            Log.d("AirplaneMode", "Service state changed");
      }
};

context.registerReceiver(receiver, intentFilter);

और जैसा कि अन्य समाधानों में वर्णित है, आप अपने रिसीवर को सूचित करते समय हवाई जहाज मोड को मतदान कर सकते हैं और अपना अपवाद फेंक सकते हैं।


यहां केवल एक चीज है जो मेरे लिए काम करती है (एपीआई 27):

IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
this.registerReceiver(br, filter);

जहां आपका ब्रॉडकास्ट br है। मेरा मानना ​​है कि अनुमति में हुए हालिया परिवर्तनों के साथ अब ConnectivityManager.CONNECTIVITY_ACTION Intent.ACTION_AIRPLANE_MODE_CHANGEDIntent.ACTION_AIRPLANE_MODE_CHANGED और Intent.ACTION_AIRPLANE_MODE_CHANGED की आवश्यकता है।


here :

 public static boolean isAirplaneModeOn(Context context){
   return Settings.System.getInt(
               context.getContentResolver(),
               Settings.System.AIRPLANE_MODE_ON, 
               0) != 0;
 }




airplane