[英]how to get wifi state change Broadcast only once
In my application, I want to get wifi state change broadcast only once.在我的应用程序中,我只想获得一次 wifi 状态更改广播。 However, when wifi changed, I received broadcast many times, what should I do?
但是,当wifi改变时,我多次收到广播,我该怎么办?
public class WifiChangedReceiver extends BroadcastReceiver {
public static String TAG = "WifiChangedReceiver";
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifi = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
boolean isConnected = wifi != null && wifi.isConnected();
if (isConnected) {
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
String wifi_ssid = wifiManager.getConnectionInfo().getSSID();
Log.d(TAG, "wifi connected==="+wifi_ssid);
} else {
Log.d(TAG, "wifi disconnected");
}
}
public class MainActivity extends Activity {
private WifiChangedReceiver mReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(mReceiver==null){
mReceiver = new WifiChangedReceiver();
}
IntentFilter filter = new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(mReceiver, filter);
}
@Override
protected void onDestroy() {
if(mReceiver!=null){
unregisterReceiver(mReceiver);
}
super.onDestroy();
}
LogCat: wifi Camus to Tutu enter image description here LogCat:wifi Camus to Tutu在此处输入图像描述
LogCat: wifi Tutu to Camus enter image description here LogCat:wifi Tutu to Camus在此处输入图片描述
First of all store a value in shared preference with value "off" and change the value of that during unregistering.so that it won't register again,so u don't get the broadcast again.首先在共享首选项中存储一个值为“off”的值,并在取消注册期间更改该值。这样它就不会再次注册,因此您不会再次收到广播。
pf=preferenceManager.getdefaultsharedpreferences(); pf=preferenceManager.getdefaultsharedpreferences();
pf.edit().getString("status") pf.edit().getString("状态")
if(pf.getString(status).equals("off")) { if(pf.getString(status).equals("off")) {
register the receiver注册接收者
} }
Then during unregistering然后在注销过程中
{ {
pf.edit().putString("status","ON") pf.edit().putString("status","ON")
unregister the receiver取消注册接收者
} }
I solved the problem by google, although the reaction is not immediately, it's useful to my project.我通过google解决了这个问题,虽然反应不是立即,但对我的项目很有用。 I posted the code, may be useful for somebody else.
我发布了代码,可能对其他人有用。
public class WifiChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle b = intent.getExtras();
NetworkInfo netInfo = (NetworkInfo) b
.get(ConnectivityManager.EXTRA_NETWORK_INFO);
NetworkInfo.State state = netInfo.getState();
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
if ((state == NetworkInfo.State.CONNECTED) && (activeNetInfo != null)
&& (activeNetInfo.getType() == netInfo.getType())) {
Log.d(TAG, "wifi connected");
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.