本人在完善WIFI功能,原来WIFI没有输错密码提示的功能。需加入
功能基本已经实现,问题:
当我framework下确定密码错误的事件后,我用广播发给我的wifisettings。
wifisettings下面接受消息后,调用dialog类重新的输密码,重连接。连上!OK!
可是当我back回到其它地方再回到wifi-setting 界面下时。又弹出这个设置界面了。。反复都是这样的。
INTENT参考wifisettings下原来的广播方式
    public WifiSettings() {
        mFilter = new IntentFilter();
        mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
        mFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        mFilter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION);
        mFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
//.........................................................................
        mFilter.addAction(WifiManager.ERROR_PASSWORD_ACTION);
//..............................................................................
        
        mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
        mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);        mReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                handleEvent(intent);
            }
        };        mScanner = new Scanner();
    }
onResume()下registerReceiver(mReceiver, mFilter);
onPause()下注销。。可是当我back回到其它地方,再回到wifi-setting 界面下时。又弹出这个设置界面了。。反复都是这样的。这里应该是onPause()下的unregisterReceiver(mReceiver);保存了设置,onResume()的时候又更新回来了。
但是我的framework并没发广播。。
else if(WifiManager.ERROR_PASSWORD_ACTION.equals(action)){ 尽然响应了。怎么解释?有什么办法呢

解决方案 »

  1.   

    看看你dialog在哪儿show的,肯定是重复show了
      

  2.   

    我是在wifistatetracker下的消息队列中发一个Intent给APP(wifisetting),其接受到这个广播就调用dialog。    private void handleEvent(Intent intent) {
            String action = intent.getAction();
            if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
    Log.i(TAG,"WifiManager.WIFI_STATE_CHANGED_ACTION");
                updateWifiState(intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
                        WifiManager.WIFI_STATE_UNKNOWN));
            } else if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) {
    Log.i(TAG,"WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals");
                updateAccessPoints();
            } else if (WifiManager.NETWORK_IDS_CHANGED_ACTION.equals(action)) {
    Log.i(TAG,"WifiManager.WifiManager.NETWORK_IDS_CHANGED_ACTION");
                if (mSelected != null && mSelected.networkId != -1) {
                    mSelected = null;
                }
                updateAccessPoints();
            } else if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) {
          updateConnectionState(WifiInfo.getDetailedStateOf((SupplicantState)
                        intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE)));
            }else if(WifiManager.ERROR_PASSWORD_ACTION.equals(action)){         int keycode =intent.getIntExtra("networkID", -1);
             Log.i(TAG,"keycode:"+keycode);
             //mSelected.priority =1000;
             showDialog(mSelected, false);         forget(keycode);        }else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
                updateConnectionState(((NetworkInfo) intent.getParcelableExtra(
                        WifiManager.EXTRA_NETWORK_INFO)).getDetailedState());
    我只发了一次广播。。
      

  3.   

    那只能打log看了,肯定是接收到这个intent的了。
      

  4.   

    测试还是一样的情况,back回去,明明wifistatetracker没发广播。。wifisetting下面却收到了。。是不是 onPause()下注销会保留原来第1次发的intent信息的?onResume()下registerReceiver(mReceiver, mFilter)又恢复了
      

  5.   

    你在onResume()下registerReceiver(mReceiver, mFilter);
    是不是应在onCreate()下注册呢?
      

  6.   

    onCreate()下的话,那我从wifi_setting下面 back到其他地方(onPause()),在返回去的时候,确实不会产生这个广播。。但是我的service还是需要发广播 过来的。需要更新这个wifi_setting下的广播信息。现在主要的问题就是,我明明是只发1次广播,但是我从wifi_setting下面 back到其他地方(onPause()),在返回去的时候,却每次都会收到action ....
    如果我一次都不发广播到这个wifi_setting下面,则不会产生上面的情况所以应该还是onpause()的问题