2012-05-24 14 views
27

私は、電話機がWiFiに接続されているときは常にデータベースを更新するアプリの開発を始めました。私はServiceBroadcastReceiverを実装しました。これはService(どのネットワークが使用されているかを教えてくれます)を実行しますが、ネットワーク状態が変化したとき、またはいつ、マニフェストファイルに何を追加するのか分かりません。何らかのネットワークに接続していますwifiまたは3gのネットワーク状態が変更されたときのBroadcastReceiver

ありがとうございます。

答えて

57

あなたの受信機タグで

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

をお勧めします。 BroadcastReceiverは、これらの設定の登録前に

それともあなたはそれをより細かく制御したい場合は、:

final IntentFilter filters = new IntentFilter(); 
filters.addAction("android.net.wifi.WIFI_STATE_CHANGED"); 
filters.addAction("android.net.wifi.STATE_CHANGE"); 
super.registerReceiver(yourReceiver, filters); 

WIFI_STATE_CHANGED

放送の意図行動のWi-Fiが有効、無効、有効になっていることを示し、無効、または不明です。 1つは、この状態をintとして提供します。利用可能であれば、前の状態を提供します。

STATE_CHANGE

ブロードキャストのWi-Fi接続の状態が変更されたことを示す意図アクション。追加の1つは、NetworkInfoオブジェクトの形式で新しい状態を提供します。新しい状態がCONNECTEDの場合、追加の追加機能がアクセスポイントのBSSIDとWifiInfoを提供することがあります。

また文字列として、あなたは「マニフェスト」タグ内に必要な権限を指定する必要があります:

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

は、接続性を確認するには、それが利用可能である、接続の種類を説明しますと、あなたはConnectivityManagerを使用することができます。

ConnectivityManager conMngr = (ConnectivityManager)this.getSystemService(this.CONNECTIVITY_SERVICE); 
android.net.NetworkInfo wifi = conMngr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
android.net.NetworkInfo mobile = conMngr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
+1

データ受信接続を確認するためにブロードキャスト受信機を追加することはできますか? – tasomaniac

+0

もう少し正確になりますか... – nullpotent

+2

これは私たちがWIFIアダプターの接続変更を私たちに与えると思います。モバイルデータ接続が変更されたときに通知を受けたい。 – tasomaniac

5

これは、私は、接続が変更されたときに通知を受けるために行うものです。 ブロードキャストを受信するBroadCastReceiverを定義します。

public class NetworkChangeReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
     NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

     boolean isConnected = wifi != null && wifi.isConnectedOrConnecting() || 
      mobile != null && mobile.isConnectedOrConnecting(); 
     if (isConnected) { 
      Log.d("Network Available ", "YES"); 
     } else { 
      Log.d("Network Available ", "NO"); 
     } 
    } 
} 

また、そのブロードキャストをマニフェストに定義し、ConnectivityChangeでフィルタする必要があります。

<receiver android:name=".NetworkChangeReceiver" > 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
     </intent-filter> 
</receiver> 

ソースhere

+0

Android Nで始まる 'android.net.conn.CONNECTIVITY_CHANGE"放送は廃止されました。ドキュメンテーションは 'JobScheduler'または' GCMNetworkManager'を使用することを提案しています –

+1

@Nicholasそれは廃止されていません。マニフェストファイルではなく、コード内の受信者。 –

0

Dantalianの答え@補完するため。 Android Nougatからは、CONNECTIVITY_ACTIONブロードキャストを受信しないため、受信者をマニフェストに宣言しないでください。代わりにContext.registerReceiver(Receiver, Intent)メソッドを使用して受信機を登録する必要があります。

here

関連する問題