Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-检测与特定wifi ssid断开连接的正确方法?_Android_Broadcastreceiver_Android Wifi - Fatal编程技术网

Android-检测与特定wifi ssid断开连接的正确方法?

Android-检测与特定wifi ssid断开连接的正确方法?,android,broadcastreceiver,android-wifi,Android,Broadcastreceiver,Android Wifi,我见过几个BroadcastReceiver示例来检测wifi断开连接,但它们似乎都不能正常工作(例如,每次断开连接都会触发两次),也没有提到检查ssid,这可能吗 因此,为了澄清,我想检测从特定ssid断开的连接。设备上的实际断开连接且未禁用wifi 谢谢 编辑:重新打开,因为在我们必须测试的两台设备上都没有任何功能。您确定同一状态有两次通知吗?断开连接通常有两个阶段: WifiManager.WIFI\u状态\u禁用 WifiManager.WIFI_STATE_DISABLED我的代码用于

我见过几个BroadcastReceiver示例来检测wifi断开连接,但它们似乎都不能正常工作(例如,每次断开连接都会触发两次),也没有提到检查ssid,这可能吗

因此,为了澄清,我想检测从特定ssid断开的连接。设备上的实际断开连接且未禁用wifi

谢谢


编辑:重新打开,因为在我们必须测试的两台设备上都没有任何功能。

您确定同一状态有两次通知吗?断开连接通常有两个阶段:

WifiManager.WIFI\u状态\u禁用

WifiManager.WIFI_STATE_DISABLED

我的代码用于检测(和重播)连接和断开连接(而不是通过禁用WIFI),并将SSID作为额外信息包括在内,如下所示。我读到的大部分内容都建议使用“请求连接”或“更改”操作,但这并没有正常工作,它似乎只有在禁用/启用设备(Nexus 4)上的wifi时才会触发,而不是在连接过程中触发。唯一的问题是第一次运行应用程序时,它不会记录当前ssid,因此不知道刚刚连接的网络的ssid是什么。有什么想法吗

public class EventMapper extends BroadcastReceiver
{
    private static String lastConnectedSsid = "";

    @Override
    public void onReceive(Context context, Intent intent)
    {
        if (intent.getAction().equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION))
        {
            SupplicantState state = intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE);

            if(state == SupplicantState.COMPLETED)
            {
                WifiManager manager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);

                lastConnectedSsid = manager.getConnectionInfo().getSSID().replace("\"", "");

                Intent newIntent = new Intent();            
                newIntent.setAction(Event.App_Event_WifiConnected.name());
                newIntent.putExtra("App_Events_SSID", lastConnectedSsid);

                context.sendBroadcast(newIntent);
            }

            if(state == SupplicantState.DISCONNECTED)
            {
                boolean wifiEnabled = ((WifiManager)context.getSystemService(Context.WIFI_SERVICE)).isWifiEnabled();

                if(wifiEnabled)
                {
                    Intent newIntent = new Intent();            
                    newIntent.setAction(Event.App_Event_WifiDisconnected.name());
                    newIntent.putExtra("App_Events_SSID", lastConnectedSsid);

                    context.sendBroadcast(newIntent);   
                }
            }
        }
    }
}

网络、状态、改变、行动最终是答案。当卸载另一个应用程序(也将侦听类似事件)时,注册此事件时出现问题的设备开始工作!不知道应用程序如何或为什么会阻止向另一个应用程序注册的事件。最终的解决方案是:

    String action = intent.getAction();

    if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION))
    {
        WifiManager manager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
        NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
        NetworkInfo.State state = networkInfo.getState();

        if(state == NetworkInfo.State.CONNECTED)
        {
            String connectingToSsid = manager.getConnectionInfo().getSSID().replace("\"", "");
            WifiStateHistory.recordConnectedSsid(connectingToSsid);
//connected
        }

        if(state == NetworkInfo.State.DISCONNECTED)
        {
            if(manager.isWifiEnabled())
            {
                String disconnectedFromSsid = WifiStateHistory.getLastConnectedSsid();
//disconnected
            }
        }
    }

我在一些定制ROM中遇到了同样的问题。我用“android.net.wifi.STATE\u CHANGE”来听网络的变化。在receiver中,我使用“(NetworkInfo)intent.getParcelableExtra(“NetworkInfo”)).getState()”来获取网络状态。有三种状态:断开、连接、连接。您可以使用DISCONNECTED来检测网络是否已断开


请让我知道它是否适用于您的情况(HTC One X(4.1))。

我将不得不重新打开此文件,因为我正在倾听请求者的状态更改动作,以显示断开连接在其他开发人员的HTC One X(4.1)上不起作用,即使它在我的Nexus 4上运行良好。HTC在断开连接时直接进入扫描状态。然后我们又尝试了网络状态改变动作,这在Nexus上是可靠的,在HTC上不起作用!令人难以置信的沮丧,因为这是阻止我们推出应用程序测试版的唯一原因。没有办法从NetworkInfo.State.DISCONNECTED获取Ssid吗?嗨,什么是WifiStateHistory类,或者在哪里定义WifiStateHistory类?谢谢