2013-02-11 32 views
6

मैं onResume() पर रिसीवर दर्ज की कर रहा हूँ:WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION निकाल दिया कभी नहीं है

registerReceiver(wifiConnectivityReceiver, new 
       IntentFilter(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)); 

यह रिसीवर ही है:

class WiFiConnectivityReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED,false)){ 
      Log.d(TAG,"Connected to network!"); 
     } else { 
      Log.d(TAG,"Could not connect to network!"); 
     } 
    } 
} 

अपने आवेदन में मैं चयनित WiFi नेटवर्क से कनेक्ट करने में सक्षम हूँ, लेकिन यह SUPPLICANT_CONNECTION_CHANGE_ACTION कभी नहीं निकाल दिया जाता है। अगर मैं इसे SUPPLICANT_STATE_CHANGED_ACTION में बदलता हूं उदाहरण के लिए यह काम कर रहा है।

मैं आईसीएस पर काम कर रहा हूं।
क्या किसी और को इस इरादे से इस तरह की समस्याएं आती हैं?

+1

आप 'NETWORK_STATE_CHANGED_ACTION' का उपयोग क्यों नहीं करते? –

+0

हां, इच्छित प्रभावों के साथ 'NETWORK_STATE_CHANGED_ACTION' का उपयोग करें: http://stackoverflow.com/a/6741489/1977815 –

उत्तर

4

मैं बात यह है कि निम्नलिखित कोड तुम्हारी मदद करेगा:

public void installMyReceiver(){ 
    if (I) Log.i(TAG, "installMyReceiver() - Online"); 
    mFlag = true; 


    myReceiver = new BroadcastReceiver(){ 
     public void onReceive (Context context, Intent intent){ 
      String action = intent.getAction(); 

      if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)){ 

       SupplicantState supplicantState = (SupplicantState)intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE); 
       if (supplicantState == (SupplicantState.COMPLETED)){ 
        if (I) Log.i(TAG, "SUPPLICANTSTATE ---> Connected"); 
         //do something 
       } 

       if (supplicantState == (SupplicantState.DISCONNECTED)){ 
        if (I) Log.i(TAG, "SUPPLICANTSTATE ---> Disconnected"); 
         //do something 
       } 

      } 
     } 
    }; 

    IntentFilter mFilter = new IntentFilter (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); 
    this.registerReceiver (myReceiver, mFilter); 
} 

यह जानकारी जो आप चाहते हैं कुछ कार्रवाई प्राप्त और फिर निष्पादित करने के लिए एक आसान तरीका है। मुझे उम्मीद है कि यह आपकी मदद कर सकता है!

0

क्या किसी और को इस इरादे से इस तरह की समस्याएं आती हैं?

हाँ, मैं। ऐसा लगता है कि कुछ उपकरणों पर इरादा ऑपरेटिंग सिस्टम द्वारा कभी घोषित नहीं किया जाता है। (हाँ, मैंने डिवाइस को फ़ैक्टरी-रीसेट किया था।) परिवर्तनों के बारे में जागरूक होने के लिए WifiManager.isWifiEnabled() को चेक करने के लिए मैं अतिरिक्त रूप से वॉचडॉग काउंटर जोड़ता हूं। बेशक, यह हमेशा थोड़ा देरी होगी।

अगर आप ऐसा करते हैं, घटना में दो बार से निपटने नहीं करने के लिए भूल जाते हैं कॉलबैक फिर से अपने BroadcastReceiver में Handler से Runnable का एक ही उदाहरण को दूर करने के लिए नहीं है, तो आपके कोड एक युक्ति है कि करता है पर निष्पादित इरादा घोषित करें।