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あなた
、ありがとうございました!
ありがとうございました!出来た! –