2011-09-07 10 views
5

मुझे वाई-फाई स्थिति की जांच के लिए ब्रॉडकास्ट रिसीवर के साथ कुछ परेशानी हो रही है। क्या आप मदद कर सकतें है?एंड्रॉइड वाई-फाई प्रबंधक के राज्य को सुनने में असमर्थ?

यह मेरी अभिव्यक्ति फ़ाइल है।

<uses-permission android:name="android.permission.READ_PHONE_STATE"> </uses-permission> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"> </uses-permission> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"> </uses-permission> 
<uses-permission android:name="android.permission.INTERNET"> </uses-permission> 
<application 
     android:icon="@drawable/icon" 
     android:label="@string/app_name"> 
    <activity 
     android:name=".MainActivity" 
      android:label="@string/app_name"> 
    <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
    </activity> 
      <receiver android:name=".MainActivity"> 
<intent-filter android:name="android.net.wifi.WIFI_STATE_CHANGED"/> 
     </receiver> 
    </application> 
</manifest> 

और यह MainActivity.java

public class MainActivity extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1); 
     String msg = null; 
     switch (state) { 
     case WifiManager.WIFI_STATE_DISABLED: 
      msg = "it is disabled"; 
      break; 
     case WifiManager.WIFI_STATE_ENABLED: 
      msg = "it is enabled"; 
      break; 
     case WifiManager.WIFI_STATE_DISABLING: 
      msg = "it is switching off"; 
      break; 
     case WifiManager.WIFI_STATE_ENABLING: 
      msg = "wifi is getting enabled"; 
      break; 
     default: 
      msg = "not working properly"; 
      break; 
     } 
     if (msg != null) { 
      Log.d("************%%%%%%%%wifi state ", "WIFI" + msg); 
      Toast.makeText(context, "Wifi state is" + msg, Toast.LENGTH_LONG) 
        .show(); 
     } 
    } 
} 

मैं अनिश्चित हूं, जहां मैं अपने गलती कर रहा हूँ। किसी भी इनपुट की सराहना की जाएगी।
मुझे कोई त्रुटि नहीं मिल रही है कि लॉग फ़ाइल आवश्यक संदेश नहीं दिखाती है।

उत्तर

8

आप लक्ष्य फ़िल्टर के लिए नहीं जोड़ा था है पैरामीटर, अंतिम प्रकट इस

<uses-permission android:name="android.permission.READ_PHONE_STATE"> </uses-permission> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"> </uses-permission> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"> </uses-permission> 
<uses-permission android:name="android.permission.INTERNET"> </uses-permission> 
<application 
      android:icon="@drawable/icon" 
      android:label="@string/app_name"> 
<activity 
      android:name=".MainActivity" 
      android:label="@string/app_name"> 
<intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
    </activity> 
    <receiver android:name=".MainActivity"> 
    <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
      <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> 
    </intent-filter> 
    </receiver> 
</application> 

आशा इस मदद करता है की तरह दिखना चाहिए।

1

अपने डिवाइस की नेटवर्क स्थिति जांचने के लिए भी इस अनुमति को जोड़ें।

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
+0

हाय अनुप मैंने मैनिफेस्ट को अनुमति दी है। और अब ऐप अप्रत्याशित रूप से बंद हो जाता है। लॉग का जिक्र करते हुए यह कहा गया कि "अनचाहे हैंडलर, बिना किसी अपवाद के कारण थ्रेड मुख्य निकास" "java.lang.RuntimeException। गतिविधि को तत्काल करने में असमर्थ"। क्या आप कृपया मुझे बता सकते हैं कि समस्या कहां उत्पन्न हो सकती है। धन्यवाद – Vinoth

3

यदि आपने निम्न अनुमतियां नहीं जोड़े हैं तो उनको जोड़ने के बाद पुनः प्रयास करें।

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> 
+0

मैंने अभी किया है जैसा आपने कहा था और मेरी एप्लिकेशन बलों को बंद कर दिया गया है। मैंने पिछली टिप्पणी में इसे समझाया है कृपया इसे देखें और मुझे बताएं कि मैं एक त्रुटि कहां कर रहा हूं। – Vinoth

2

सबसे पहले, आपको यह सुनिश्चित करना चाहिए कि आप वाईफ़ाई राज्य देखने के लिए अनुमति प्राप्त करने की अनुमति का अनुरोध करें। बस अनुपकर रोजेकर ने कहा।

दूसरा, मैं तुम्हें एक BroadcastReceiver का उपयोग करने में गलती करते हैं विश्वास करते हैं। आपके manifest.xml में, आप मुख्य क्रियाशीलता घोषित करते हैं।

<activity 
     android:name=".MainActivity" 
      android:label="@string/app_name"> 
    <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
    </activity> 

इसलिए मेनएक्टिव एक गतिविधि है। साथ ही, आप मेनएक्टिविटी को ब्रॉडकास्ट रिसीवर के रूप में घोषित करते हैं। यह अवैध है। ऐसा करने के लिए आपको एक स्टैंडअलोन प्रसारण का उपयोग करना चाहिए। इस तरह:

  <receiver android:name=".WifiBroadcastReceiver"> 
<intent-filter> 
    <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> 
</intent-filter> 
     </receiver> 

कृपया ध्यान दें कि मैं broadcastReceiver के लिए और नोड के अंदर नाम बदल दिया है, आप ऊपर की तरह एक <action> नोड जोड़ना चाहिए।

तीसरा, एक WifiBroadcastReceiver.java बनाने और इसे करने के लिए अपने मूल MainActivity.java से कोड कॉपी। public class WifiBroadcastReceiver extends BroadcastReceiver

आशा मैं मदद कर सकता है के लिए कक्षा घोषणा को बदलने के लिए याद रखें। कृपया मुझे बताएं कि यह काम करता है या नहीं। मेरे पास हाथ पर एक पीसी नहीं है; इस प्रकार मैं टी कोड का परीक्षण नहीं करता हूं।

इसके अलावा, आप एक नया MainActivity.java फ़ाइल की जरूरत है। यह ग्रहण में स्वचालित रूप से उत्पन्न किया जा सकता है। इस वर्ग को घोषित किया जाना चाहिए: public class MainActivity extends Activity

+0

आपकी व्याख्या ने मैनिफेस्ट फ़ाइल को संपादित करने के तरीके पर अपने संदेह को मंजूरी दे दी है। धन्यवाद हुआंग। मैं अब इसका परीक्षण कर रहा हूं, आपको बताएगा कि यह कैसे काम करता है – Vinoth

0

मेरे लिए AndroidManifiest.xml में परिवर्तन काम नहीं किया। मुझे एक ही समस्या है, आवेदन अचानक बंद कर दिया।

मैं मुख्य गतिविधि में registerReceiver का इस्तेमाल किया और यह काम करता है :) मेरे लिए WifiStateTester वर्ग कि BroadcastReceiver से फैली हुई है।

WifiStateTester wfs= new WifiStateTester(); 
IntentFilter iFilter= new IntentFilter(); 
iFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); 
iFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 
this.registerReceiver(wfs, iFilter); 

अन्य अलग बात मैंने किया, onReceiver विधि में मैं सीधे वाईफाई स्थिति की जाँच की है।

0

विभिन्न पिछले जवाब का मिश्रण-एवं-मिलान, इन स्निपेट मेरे लिए काम किया अगर मैं एक WiFi नेटवर्क से कनेक्ट AM जाँच करने के लिए (यह मुझे बता नहीं है अगर मैं इंटरनेट से जुड़ा हुआ हूँ):

बनाने एक WifiMonitor.java वर्ग

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.wifi.WifiManager; 
import android.util.Log; 

public class WifiMonitor extends BroadcastReceiver { 
    private String TAG = "TGtracker"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.e(TAG,"entered wifimonitor"); 
     // Process the Intent here 
     WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
     if (wifi.isWifiEnabled()==true) { 
      Log.d(TAG, "You are connected to WIFI "+wifi.getConnectionInfo()); 
     } else { 
      Log.e(TAG,"You are NOT connected to WIFI"); 
     } 
    } 
} 

अब अपनी मालसूची फ़ाइल के पास जाकर शामिल

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

और अंत में, सही </आवेदन से पहले रिसीवर जगह tion> टैग (अभी भी मैनिफ़ेस्ट फ़ाइल में)

<application... 
    <receiver android:name=".WifiMonitor" android:enabled="true"> 
     <intent-filter> 
      <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" /> 
      <action android:name="android.net.wifi.STATE_CHANGE" /> 
      <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" /> 
     </intent-filter> 
    </receiver> 
</application> 

जब अपने कोड को लागू करने, < आवेदन ... या </आवेदन कॉपी नहीं करते> उपरोक्त कोड में टैग (मैं सिर्फ उन्हें वहाँ रखा ताकि आप पता चल जाएगा रिसीवर कहां रखें)।

नोट: कृपया अपनी मुख्य गतिविधि को गतिविधि बढ़ाने के लिए ठीक करें और ब्रॉडकास्ट रिसीवर नहीं।

संबंधित मुद्दे