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ềnpublic 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!
Cảm ơn bạn! Nó đã làm việc! –