Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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连接广播事件时出现问题_Android_Bluetooth_Wifi - Fatal编程技术网

在android中获取wifi连接广播事件时出现问题

在android中获取wifi连接广播事件时出现问题,android,bluetooth,wifi,Android,Bluetooth,Wifi,我正在尝试通过一个按钮来实现一个活动,当单击该按钮时,可以打开和关闭wifi状态。打开和关闭都可以,但同时,我想相应地更改按钮的颜色或图像,即打开时图像不同,关闭时图像不同。为此,我创建了一个意图过滤器和一个广播接收器函数。在广播接收器中,我正在检查多个系统事件,如电源连接/断开、电池更换、wifi打开/关闭等。问题是我没有收到wifi状态更改的消息-我确实收到了电池和电源相关的消息,但没有收到wifi(注:我在蓝牙打开/关闭通知方面也有同样的问题)。有谁能告诉我出了什么问题吗?代码如下: pr

我正在尝试通过一个按钮来实现一个活动,当单击该按钮时,可以打开和关闭wifi状态。打开和关闭都可以,但同时,我想相应地更改按钮的颜色或图像,即打开时图像不同,关闭时图像不同。为此,我创建了一个意图过滤器和一个广播接收器函数。在广播接收器中,我正在检查多个系统事件,如电源连接/断开、电池更换、wifi打开/关闭等。问题是我没有收到wifi状态更改的消息-我确实收到了电池和电源相关的消息,但没有收到wifi(注:我在蓝牙打开/关闭通知方面也有同样的问题)。有谁能告诉我出了什么问题吗?代码如下:

protected void onResume() {
    super.onResume();

    IntentFilter intentFilter = new IntentFilter();

    intentFilter.addAction("android.intent.action.SCREEN_ON");
    intentFilter.addAction("android.intent.action.SCREEN_OFF");
    intentFilter.addAction("android.intent.action.BATTERY_LOW");
    intentFilter.addAction("android.intent.action.BATTERY_OKAY");
    intentFilter.addAction("android.intent.action.BATTERY_CHANGED");
    intentFilter.addAction("android.intent.action.ACTION_POWER_CONNECTED");
    intentFilter.addAction("android.intent.action.ACTION_POWER_DISCONNECTED");
    intentFilter.addAction("WifiManager.WIFI_STATE_CHANGED_ACTION");
    intentFilter.addAction("BluetoothAdapter.STATE_TURNING_OFF");
    intentFilter.addAction("BluetoothAdapter.STATE_ON");

    registerReceiver(myReceiver, intentFilter);
}

private BroadcastReceiver myReceiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        String str = intent.getAction();

        displayMessage("In myReceiver, action = " + str);
        Log.d("Settings", "Received action: " + str);

        if (str.equals("android.intent.action.BATTERY_CHANGED")) {
            displayMessage("battery changed...");
        } else if (str.equals("android.intent.action.ACTION_POWER_CONNECTED")) {
            displayMessage("power connected");
        } else if (str.equals("android.intent.action.ACTION_POWER_DISCONNECTED")) {
            displayMessage("power disconnected");
        } else if (str.equals("WifiManager.WIFI_STATE_CHANGED_ACTION")) {
            int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
            displayMessage("wifi state is " + wifiState);               
        } else if (str.equals("BluetoothAdapter.STATE_ON")) {
            displayMessage("bluetooth on");             
        } else if (str.equals("BluetoothAdapter.STATE_TURNING_OFF")) {
            displayMessage("bluetooth off");
    }
}};

我已经找到了另一个解决方案,因为默认方式似乎不适合我。我所做的是:


在“切换Wifi”按钮上单击,我首先调用wifiManager.setWifiEnabled(!enabled),然后调用启动线程并检查wifiManager状态更改的函数。线程将一直运行,直到wifi状态发生变化,或者5秒后没有任何变化。如果状态发生更改,我会向活动发送一个自定义广播,通知此情况。这似乎很好,所以我认为这个问题已经解决了。

< P>也许尝试寻找连接管理器的变化。 intentFilter.addAction(“ConnectivityManager.CONNECTIVITY_ACTION”)

添加“android.net.wifi.wifi\u状态更改”而不是“WifiManager.wifi\u状态更改\u操作”
因为应该有字符串常量,而不是字符串代码块

您使用的是仿真器还是真实设备?WiFi和蓝牙在emulator中不工作。