2013-07-29 9 views
5

W mojej aplikacji potrzebuję usługi zrestartowanej po podłączeniu zmiany sieci. Obecnie działa tylko w jedną stronę (wifi do danych mobilnych), ale nie działa w drugą stronę (dane mobilne do wifi). Dlaczego tak jest? Czy to dlatego, że nie dostaję android.net.wifi.WIFI_STATE_CHANGED w moim odbiorniku telewizyjnym, czy może w niewłaściwym miejscu?android.net.wifi.WIFI_STATE_CHANGED nie jest nadawana

Dzięki za pomoc.

Kod: Oczywisty wejście dla odbiornika:

<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> 

Odbiornik sam:

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; 
} 

Odpowiednie uprawnienia mam wymienione:

  • android.permission.ACCESS_WIFI_STATE
  • android.permi ssion.ACCESS_NETWORK_STATE
  • android.permission.INTERNET

Jeszcze raz dziękuję!

Odpowiedz

12

android.net.wifi.WIFI_STATE_CHANGED jest wysyłana tylko wtedy, gdy Wi-Fi jest włączone lub wyłączone. Musisz też złapać numer android.net.wifi.STATE_CHANGE, jeśli chcesz odbierać zdarzenie rozgłoszeniowe, gdy jesteś podłączony do sieci Wi-Fi lub rozłączasz się z nią.

+0

Dziękujemy! Zadziałało! –