Android 广播接收器抛出多个广播

Android 广播接收器抛出多个广播,android,broadcastreceiver,Android,Broadcastreceiver,嗯。我很好奇这是否是我的代码,或者广播接收器是否在做它应该做的事情。我设置了一个广播接收器来监听wifi的变化,例如是否连接了某个网络。广播接收器工作,并在on receive方法中将信息发布到logcat中。这里的问题是,它似乎发射了多次,在我的例子中是8次。这就是它应该做的吗?有没有办法限制它开火的次数 这是原木猫 07-12 13:33:21.748 8152-8152/com.apklegion.pcnotetest D/TEMP: android.net.wifi.STATE_CHA

嗯。我很好奇这是否是我的代码,或者广播接收器是否在做它应该做的事情。我设置了一个广播接收器来监听wifi的变化,例如是否连接了某个网络。广播接收器工作,并在on receive方法中将信息发布到logcat中。这里的问题是,它似乎发射了多次,在我的例子中是8次。这就是它应该做的吗?有没有办法限制它开火的次数

这是原木猫

07-12 13:33:21.748 8152-8152/com.apklegion.pcnotetest D/TEMP: 
android.net.wifi.STATE_CHANGE
07-12 13:33:21.753 8152-8152/com.apklegion.pcnotetest D/TEMP: 
SSID :: "SkyNet Global Defense Network "
07-12 13:33:21.754 8152-8152/com.apklegion.pcnotetest D/TEMP: Wifi is enabled
07-12 13:33:21.806 8152-8152/com.apklegion.pcnotetest D/TEMP: 
android.net.wifi.STATE_CHANGE
07-12 13:33:21.809 8152-8152/com.apklegion.pcnotetest D/TEMP: BSSID :: 
4c:60:de:cf:e3:88SSID :: "SkyNet Global Defense Network "
07-12 13:33:21.810 8152-8152/com.apklegion.pcnotetest D/TEMP: Wifi is enabled
07-12 13:33:21.862 8152-8152/com.apklegion.pcnotetest D/TEMP: 
android.net.wifi.STATE_CHANGE
07-12 13:33:21.865 8152-8152/com.apklegion.pcnotetest D/TEMP: SSID :: "SkyNet 
Global Defense Network "
07-12 13:33:21.866 8152-8152/com.apklegion.pcnotetest D/TEMP: Wifi is enabled
07-12 13:33:21.918 8152-8152/com.apklegion.pcnotetest D/TEMP: 
android.net.wifi.STATE_CHANGE
07-12 13:33:21.920 8152-8152/com.apklegion.pcnotetest D/TEMP: SSID :: "SkyNet 
Global Defense Network "
07-12 13:33:21.921 8152-8152/com.apklegion.pcnotetest D/TEMP: Wifi is enabled
07-12 13:33:21.966 8152-8152/com.apklegion.pcnotetest D/TEMP: 
android.net.wifi.STATE_CHANGE
07-12 13:33:21.969 8152-8152/com.apklegion.pcnotetest D/TEMP: SSID :: "SkyNet 
Global Defense Network "
07-12 13:33:21.970 8152-8152/com.apklegion.pcnotetest D/TEMP: Wifi is enabled
07-12 13:33:22.013 8152-8152/com.apklegion.pcnotetest D/TEMP: 
android.net.wifi.STATE_CHANGE
07-12 13:33:22.017 8152-8152/com.apklegion.pcnotetest D/TEMP: SSID :: "SkyNet 
Global Defense Network "
07-12 13:33:22.018 8152-8152/com.apklegion.pcnotetest D/TEMP: Wifi is enabled
07-12 13:33:22.073 8152-8152/com.apklegion.pcnotetest D/TEMP: 
android.net.wifi.STATE_CHANGE
07-12 13:33:22.075 8152-8152/com.apklegion.pcnotetest D/TEMP: SSID :: "SkyNet 
Global Defense Network "
07-12 13:33:22.076 8152-8152/com.apklegion.pcnotetest D/TEMP: Wifi is enabled
 07-12 13:33:22.386 8152-8152/com.apklegion.pcnotetest D/TEMP: 
 android.net.wifi.STATE_CHANGE
07-12 13:33:22.391 8152-8152/com.apklegion.pcnotetest D/TEMP: SSID :: "SkyNet 
Global Defense Network "
07-12 13:33:22.392 8152-8152/com.apklegion.pcnotetest D/TEMP: Wifi is enabled
Wifi is  connected
这是广播接收机类

public class MyWifiStateListener extends BroadcastReceiver {

Boolean isConnected = false;
String skynet, message;
public static boolean isConn = false;

                           @Override
                        public void onReceive(Context context, Intent intent) {


                            // TODO Auto-generated method stub
                            String action = intent.getAction();
                            Log.d("TEMP", action);


                            assert action != null;
                            if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {

                                NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);


                                if (info.getType() == ConnectivityManager.TYPE_WIFI) {
                                    WifiManager myWifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
                                    WifiInfo wifiInfo = myWifiManager.getConnectionInfo();
                                    String test = wifiInfo.toString();
                                    String sid = wifiInfo.getSSID();


                                    tv.setText(test);
                                    int count =0;

                                    Log.d("TEMP", "SSID :: " + wifiInfo.getSSID());
在我的主要活动类中,我注册了接收者,并在OnPause和OnResume中设置了注销和重新注册

   filters.addAction("android.net.wifi.STATE_CHANGE");
    super.registerReceiver(myWifiStateListener, filters);

@Override
protected void onPause() {
   try {
       unregisterReceiver(myWifiStateListener);
       Log.i(TAG, "Unregistered broadcast receiver");
   }catch (Exception e){

    }
    super.onPause();
}


@Override
protected void onResume() {
    Log.i(TAG, "Registered broadcast receiver");
    registerReceiver(myWifiStateListener,filters);
    super.onResume();
}


@Override
protected void onDestroy() {
   stopService(new Intent(this, MyWifiStateListener.class));
    Log.i(TAG, "Stopped service");
    super.onDestroy();
}

我觉得不错。我很确定设备经常检查它。。。这可能就是为什么会发生这种情况。使用shared pref存储值…如果值发生变化,则所有8个广播都会同时发生,但不会超过一段时间哦。真奇怪。流程是什么?如果用户连接到wifi,为什么要发送广播?应用程序会监听wifi连接,一旦手机自动连接,它会向我电脑上的服务器发送信号。广播用于监控哪个wifi以及何时连接。除非有另外一种方法,这种方法除了额外的广播扫描外,现在还可以用。我问你为什么想知道某人连接到哪个wifi?为什么这很重要?