我有以下广播接收器。
public class TestNetworkReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String TAG = "TEST:";
if (intent.getAction().equals("android.net.wifi.WIFI_STATE_CHANGED")) {
Log.i(TAG, "Wifi toggled");
} else if (intent.getAction().equals("android.net.conn.CONNECTIVITY_CHANGE")) {
Log.i(TAG, "Network connection changed");
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
Log.i(TAG, "Network connecion is:" + networkInfo.getTypeName());
Log.i(TAG, "Detail:"+networkInfo.isFailover());
}
}
}
}
当我打开和关闭 wifi 时
I/TEST:﹕ Wifi toggled
I/TEST:﹕ Network connection changed
I/TEST:﹕ Network connecion is:WIFI
I/TEST:﹕ Detail:false
I/TEST:﹕ Network connection changed
I/TEST:﹕ Network connecion is:WIFI
I/TEST:﹕ Detail:false
I/TEST:﹕ Network connection changed
I/TEST:﹕ Network connecion is:WIFI
I/TEST:﹕ Detail:false
I/TEST:﹕ Network connection changed
I/TEST:﹕ Network connecion is:mobile
I/TEST:﹕ Detail:true
I/TEST:﹕ Network connection changed
I/TEST:﹕ Network connecion is:mobile
I/TEST:﹕ Detail:true
我想要实现的是知道连接何时进入“移动”或“wifi”并且处于 Activity 状态但只有一次。否则它会运行我的例程 3 或 4 次。我试过更改 networkInfo.whatever() 但所有内容都会重复 3 或 4 次或更多或更少次。有没有一种方法我可以只知道连接已经改变,并且它在接收器的某个地方只有一次?
最佳答案
广播 [CONNECTIVITY_ACTION ] 似乎在少数设备上很粘,因此当您注册接收器时,它会立即调用 onReceive() 和最近发送的广播。
因此建议您需要在manifest上静态声明receiver。
这是我用过的:
@Override
protected void onResume() {
super.onResume();
setMyReceiverStayus(PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
}
@Override
protected void onPause() {
super.onPause();
setMyReceiverStayus(PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
}
private void setMyReceiverStayus(int receiverState) {
ComponentName receiver = new ComponentName(this, MyReceiver.class);
PackageManager pm = this.getPackageManager();
pm.setComponentEnabledSetting(receiver, receiverState,
PackageManager.DONT_KILL_APP);
}
AndroidManifest.xml
<receiver android:name="com.example.receiver.MyReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
关于android - wifi连接改变广播接收器重复多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27119437/