2012-02-24 26 views
10

Wi-Fi BroadcastReceiverを登録して、変更時にWiFi状態を取得しようとしました。しかし、これまで私は放送を受けていない運がありません。マニフェストで宣言されたBroadcastReceiverがブロードキャストを受信して​​いません

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <receiver android:name=".WifiReceiver" > 
     <intent-filter> 
      <action android:name="android.net.wifi.WifiManager.WIFI_STATE_CHANGED_ACTION" /> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
     </intent-filter> 
    </receiver> 

    //activity declaration here... 

</application> 

あなたはマニフェストにBraodcastReceiverを登録する方法を知っていますか?

私は自分のアプリケーションが実行されているかどうかのWiFi状態の変更がある場合に無線LANを監視にしたいので、活動に登録する必要はありません。私は実際にいくつかの助けを得ることを期待

public class WifiReceiver extends BroadcastReceiver { 
    private final String TAG = "WifiReceiver"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN); 
     String wifiStateText = "No State"; 

     switch (wifiState) { 
     case WifiManager.WIFI_STATE_DISABLING: 
      wifiStateText = "WIFI_STATE_DISABLING"; 
      break; 
     case WifiManager.WIFI_STATE_DISABLED: 
      wifiStateText = "WIFI_STATE_DISABLED"; 
      break; 
     case WifiManager.WIFI_STATE_ENABLING: 
      wifiStateText = "WIFI_STATE_ENABLING"; 
      break; 
     case WifiManager.WIFI_STATE_ENABLED: 
      wifiStateText = "WIFI_STATE_ENABLED"; 
      break; 
     case WifiManager.WIFI_STATE_UNKNOWN: 
      wifiStateText = "WIFI_STATE_UNKNOWN"; 
      break; 
     default: 
      break; 
     } 
     MyLog.d(TAG, "onReceive Broadcast > WiFiState: " + wifiStateText); 
     MyLog.d(TAG, "onReceive Broadcast > Time: " + new Date()); 
    } 
} 

これは私BroadcastReceiverクラスです。前もって感謝します。

+0

このブログを見http://marakana.com/forums/android/examples/40.html – Ajay

+0

に関連するすべての放送受信機では、には、Androidのための許可を定義しています.permission.ACCESS_WIFI_STATE android.permission.CHANGE_WIFI_STATE – Ajay

+0

@Ajay、私は既にあなたが言及したブログを見ました。問題は、私が言及したように、私は活動のマニフェストではなく受信者を登録することです。私はすでにマニフェストに許可を入れました。とにかく、あなたの注意Ajayに感謝します。 – Zul

答えて

25
マニフェストであなたの受信機がすべき。また、次の許可が必要になる場合があり、この

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

のように見えます

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

Wow..thanks @ dong221。それは本当にそれをしました。あなたが尋ねる気にならないなら、どのようにアクション名が 'android.net.wifi.WIFI_STATE_CHANGED'でなければならないことを知っていますか?あなたは私にそれに関するリンクを教えてもらえますか? – Zul

+1

@Zulここに定数値として記載されています:http://developer.android.com/reference/android/net/wifi/WifiManager.html#WIFI_STATE_CHANGED_ACTION –

0

ブロードキャストがフラグIntent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOTで送信されたというだけで、あなたのアプリはAndroidサービスの起動前にこの受信機を登録しなければならないことを意味します。

0

は、私はあなたがこの方法のように受信機を登録していると思う:

<receiver 
    android:name=".WiFiReciever"> 
    <intent-filter> 
     <action 
      android:name="class name with package" /> 
     <data 
      android:scheme="myscheme" /> 
    </intent-filter> 
</receiver> 
+0

''、私はあなたに従っていない。それについての例は? – Zul

3
<receiver android:name=".WifiReceiver" > 
    <intent-filter android:priority="100" > 
      <action 
      android:name="android.net.wifi.WIFI_STATE_CHANGED" 
      android:enabled="true" /> 
    </intent-filter> 
</receiver> 

彼は高い優先度と真としても使用可能フラグ

+0

Wow..thanks @ user1203673。それは本当にそれをしました。あなたが尋ねる気にならないなら、どのようにアクション名が 'android.net.wifi.WIFI_STATE_CHANGED'でなければならないことを知っていますか?あなたは私にそれに関するリンクを教えてもらえますか?投票できないのは残念ですが、私の評判は十分ではありません。 – Zul

+0

属性が "enabled"の場合、構文エラーが発生します。 – usman

+0

これを試してください: ' ' –

0

私の仕事に最も:

マニフェスト:

<receiver android:name="com.AEDesign.communication.WifiReceiver"> 
    <intent-filter android:priority="100"> 
     <action android:name="android.net.wifi.STATE_CHANGE" /> 
    </intent-filter> 
</receiver> 

WifiReceiverクラス:

public class WifiReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 
     if(info != null) { 
      if(info.isConnected()) { 
       //Do your work. 
       //To check the Network Name or other info: 
       WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
       WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
       String ssid = wifiInfo.getSSID();  
      } 
     } 
    } 
} 

権限:

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

これは、インターネット接続

<action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />     
<action android:name="android.net.wifi.STATE_CHANGE" /> 
関連する問題