2017-09-02 12 views
5

मेरे आवेदन में जब भी डिवाइस वाईफ़ाई नेटवर्क से कनेक्ट या डिस्कनेक्ट हो जाता है तो मुझे अधिसूचित होना पड़ता है। इसके लिए मुझे BroadcastReceiver का उपयोग करना है, लेकिन यहां विभिन्न लेखों और प्रश्नों के माध्यम से पढ़ने के बाद मैं थोड़ा उलझन में हूं जिसके लिए मुझे ब्रॉडकास्ट एक्शन का उपयोग करना चाहिए। मेरी राय में मैं तीन विकल्प हैं:वाईफ़ाई परिवर्तन के लिए प्रसारण कार्रवाई

संसाधनों मैं वास्तव में केवल सूचना पाने के लिए जब भी इस उपकरण में एक वाई-फाई नेटवर्क से CONNECTED है चाहता हूँ कम करने के लिए (और इसे एक आईपी पता प्राप्त हुआ है) या जब डिवाइस में DISCONNECTED है। मुझे CONNECTING आदि जैसे अन्य राज्यों की परवाह नहीं है

तो आपको क्या लगता है कि इस के लिए सबसे अच्छा ब्रॉडकास्ट एक्शन का उपयोग करना चाहिए? और क्या मुझे घटनाओं को मैन्युअल रूप से फ़िल्टर करना है (क्योंकि मुझे CONNECTED और DISCONNECTED) onReceive में अधिक प्राप्त होता है?

संपादित करें: जैसा कि मैंने नीचे एक टिप्पणी में बताया है, मुझे लगता है कि SUPPLICANT_CONNECTION_CHANGE_ACTION मेरे लिए सबसे अच्छा विकल्प होगा लेकिन इसे मेरे आवेदन से कभी भी निकाल दिया या प्राप्त नहीं किया गया है। Others इस प्रसारण के साथ एक ही समस्या है लेकिन इसके लिए एक वास्तविक समाधान कभी प्रस्तावित नहीं है (वास्तव में अन्य प्रसारण का उपयोग किया जाता है)। इसके लिए कोई विचार?

+0

अस्पष्टता कहां है? SUPPLICANT_CONNECTION_CHANGE_ACTION के लिए एंड्रॉइड प्रलेखन स्पष्ट रूप से बताता है "प्रसारण उद्देश्य कार्रवाई यह दर्शाती है कि आपूर्तिकर्ता से कनेक्शन स्थापित किया गया है (और अब वाई-फाई परिचालन करना संभव है) या आपूर्तिकर्ता से कनेक्शन खो गया है। एक अतिरिक्त कनेक्शन स्थिति प्रदान करता है एक बूलियन, जहां सही मतलब कनेक्ट है। " शेष उद्देश्यों में अतिरिक्त सुविधाएं हैं जो आपको वाईफ़ाई राज्य या संपूर्ण नेटवर्कइन्फो ऑब्जेक्ट को बदली गई नेटवर्क जानकारी ले सकती हैं। मुझे लगता है कि यह आपकी आवश्यकताओं को पूरा करने के लिए बहुत आगे है (1)। –

+0

आप सही हैं लेकिन समस्या यह है कि मेरे आवेदन द्वारा 'SUPPLICANT_CONNECTION_CHANGE_ACTION' कभी प्राप्त नहीं हुआ है और जैसा कि मैंने अन्य प्रश्नों में पढ़ा है यह एक आम समस्या है। जहां तक ​​मैं कह सकता हूं, सभी प्रसारण इस प्रसारण को फायरिंग नहीं कर रहे हैं। – Cilenco

+0

फिर निस्संदेह शेष दो प्रसारणों का उपयोग करना चाहिए यदि वे आपके लिए काम करते हैं। –

उत्तर

1

कृपया

@Override 
protected void onResume() { 
    super.onResume(); 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); 
    filter.addAction("android.net.wifi.STATE_CHANGE"); 
    registerReceiver(networkChangeReceiver, filter); 
} 

@Override 
protected void onDestroy() { 
    unregisterReceiver(networkChangeReceiver); 
    super.onDestroy(); 
} 

और

BroadcastReceiver networkChangeReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     if (!AppUtils.hasNetworkConnection(context)) { 
      showSnackBarToast(getNetworkErrorMessage()); 
     } 

    } 
}; 

मैं इस का उपयोग कर रहा है और यह मेरे लिए काम कर रहा है की कोशिश करो। उम्मीद है कि यह आपकी मदद करेगा।

+0

धन्यवाद लेकिन मुझे पता है कि यह कैसे करें। वास्तविक सवाल यह है कि यदि यह 'IntentFilter' (इसमें उपयोग की गई कार्रवाई) केवल कनेक्ट होने और ईवेंट को डिस्कनेक्ट करने का सबसे अच्छा समाधान है। – Cilenco

1

आप या तो प्रकट या टुकड़ा या गतिविधि है, जो कभी आप के लिए अनुकूल है, WifiManager.NETWORK_STATE_CHANGED_ACTION कार्रवाई के साथ WifiManager.NETWORK_STATE_CHANGED_ACTION works.

रजिस्टर रिसीवर के लिए जा सकते हैं।

अवहेलना रिसीवर:

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

    final String action = intent.getAction(); 

    if(action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){ 
     NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 
     boolean connected = info.isConnected(); 
     if (connected) 
     //call your method 
    }  
} 
संबंधित मुद्दे