2013-07-29 10 views
5

Uygulamamda, ağ değişimi varsa yeniden başlatılmış bir servise ihtiyacım var. Şu anda sadece bir şekilde çalışıyor (mobil verilere wifi) ama diğer şekilde çalışmıyor (mobil verilere wifi.) Neden bu? Bu benim yayın alıcımda android.net.wifi.WIFI_STATE_CHANGED almam ya da yanlış bir izin almamın nedeni mi?android.net.wifi.WIFI_STATE_CHANGED yayınlanmadı

Yardımlarınız için teşekkür ederiz.

Kodu:

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

alıcı kendisi: Ben listeledik

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

İlgili izinleri:

  • android.permission.ACCESS_WIFI_STATE
  • alıcı için Manifest giriş android.permi Yine ssion.ACCESS_NETWORK_STATE
  • android.permission.INTERNET

, teşekkür ederim! Yalnızca WiFi etkinleştirildiğinde veya devre dışı bırakıldığında

cevap

12

android.net.wifi.WIFI_STATE_CHANGED gönderilir. Bir WiFi ağına bağlandığınızda veya bağlantısı kesildiğinde yayın olayı almak istiyorsanız, android.net.wifi.STATE_CHANGE'u da yakalamanız gerekir.

+0

Teşekkür ederiz! İşe yaradı! –