2013-07-29 4 views
5

私のアプリでは、ネットワーク変更が接続されている場合、サービスを再開する必要があります。現在のところ、一方向(Wi-Fiからモバイルデータ)でしか動作しませんが、それ以外の方法では動作しません(Wi-Fiからモバイルデータ)。それは私のブロードキャストレシーバーでandroid.net.wifi.WIFI_STATE_CHANGEDを取得していないか、おそらく誤った許可ですか?android.net.wifi.WIFI_STATE_CHANGEDがブロードキャストされていません

ありがとうございました。

コード:

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

受信機自体::私が列挙されている

public static final int TYPE_WIFI = 1; 
public static final int TYPE_MOBILE = 2; 
public static final int TYPE_NOT_CONNECTED = 0; 
public static final String PREFS_NAME = "cakecloudpreferences"; 

@Override 
public void onReceive(Context context, Intent intent) { 
    SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0); 
    if (getConnectivityStatus(context)!=0&&!settings.getBoolean("osmframerunning",false)) { 
     context.stopService(new Intent(context, OSMFrame.class)); 
     settings.edit().putBoolean("osmframerunning",false).commit(); 
     Intent frameintent = new Intent(context,OSMFrame.class); 
     frameintent.putExtra("username",settings.getString("usr","")); 
     frameintent.putExtra("password",settings.getString("pswd","")); 
     frameintent.putExtra("uid",settings.getString("uid","")); 
     context.startService(frameintent); 
     Log.i("CCLiveForever","LiveForever Triggered, OSMFrame restarted."); 
    } 
} 

public int getConnectivityStatus(Context context) { 
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
    if (null != activeNetwork) { 
     if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) return TYPE_WIFI; 
     if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) return TYPE_MOBILE; 
    } 
    return TYPE_NOT_CONNECTED; 
} 

関連する権限:

  • android.permission.ACCESS_WIFI_STATE
  • 受信機のための マニフェストエントリandroid.permi再びssion.ACCESS_NETWORK_STATE
  • android.permission.INTERNETあなた

、ありがとうございました!

答えて

12

android.net.wifi.WIFI_STATE_CHANGEDは、WiFiが有効または無効の場合にのみ送信されます。 WiFiネットワークに接続または切断したときにブロードキャストイベントを受信する場合は、android.net.wifi.STATE_CHANGEもキャッチする必要があります。

+0

ありがとうございました!出来た! –

関連する問題