2013-07-29 33 views
5

Trong ứng dụng của tôi, tôi cần một dịch vụ được khởi động lại nếu thay đổi mạng được kết nối. Hiện tại nó chỉ hoạt động một cách (wifi cho dữ liệu di động) nhưng nó không hoạt động theo cách khác (dữ liệu di động để wifi.) Tại sao điều này? Có phải vì tôi không nhận được android.net.wifi.WIFI_STATE_CHANGED trong bộ thu phát sóng của tôi hoặc có thể là sự cho phép không đúng chỗ?android.net.wifi.WIFI_STATE_CHANGED không được phát sóng

Cảm ơn bạn đã được trợ giúp.

Code: nhập Manifest cho nhận:

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

Người nhận bản thân:

quyền
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; 
} 

liên quan tôi đã liệt kê:

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

Một lần nữa, cảm ơn!

Trả lời

12

android.net.wifi.WIFI_STATE_CHANGED chỉ được gửi khi WiFi được bật hoặc tắt. Bạn cũng cần nắm bắt android.net.wifi.STATE_CHANGE nếu bạn muốn nhận sự kiện phát sóng khi bạn kết nối hoặc ngắt kết nối với mạng WiFi.

+0

Cảm ơn bạn! Nó đã làm việc! –

Các vấn đề liên quan