首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法监听android wi-fi管理器的状态?

无法监听android wi-fi管理器的状态?
EN

Stack Overflow用户
提问于 2011-09-07 14:24:27
回答 6查看 17.8K关注 0票数 5

我在使用BroadCast接收器检查Wi-fi状态时遇到了一些问题。你能帮帮忙吗?

这是我的清单文件。

代码语言:javascript
复制
<uses-permission android:name="android.permission.READ_PHONE_STATE"> </uses-permission>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"> </uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"> </uses-permission>
<uses-permission android:name="android.permission.INTERNET"> </uses-permission>
<application 
        android:icon="@drawable/icon" 
        android:label="@string/app_name">
    <activity 
        android:name=".MainActivity"
            android:label="@string/app_name">
    <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
           <receiver android:name=".MainActivity">
<intent-filter android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
       </receiver>  
   </application>
</manifest>

这是MainActivity.java

代码语言:javascript
复制
public class MainActivity extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1);
        String msg = null;
        switch (state) {
        case WifiManager.WIFI_STATE_DISABLED:
            msg = "it is disabled";
            break;
        case WifiManager.WIFI_STATE_ENABLED:
            msg = "it is enabled";
            break;
        case WifiManager.WIFI_STATE_DISABLING:
            msg = "it is switching off";
            break;
        case WifiManager.WIFI_STATE_ENABLING:
            msg = "wifi is getting enabled";
            break;
        default:
            msg = "not working properly";
            break;
        }
        if (msg != null) {
            Log.d("************%%%%%%%%wifi state ", "WIFI" + msg);
            Toast.makeText(context, "Wifi state is" + msg, Toast.LENGTH_LONG)
                    .show();
        }
    }
}

我不确定我在哪里犯了错。任何意见都将不胜感激。

我没有收到任何错误,只是日志文件没有显示所需的消息。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-09-07 17:59:50

您尚未添加意图筛选器的参数,最终的清单应如下所示

代码语言:javascript
复制
<uses-permission android:name="android.permission.READ_PHONE_STATE"> </uses-permission>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"> </uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"> </uses-permission>
<uses-permission android:name="android.permission.INTERNET"> </uses-permission>
<application 
            android:icon="@drawable/icon" 
            android:label="@string/app_name">
<activity 
            android:name=".MainActivity"
            android:label="@string/app_name">
<intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    <receiver android:name=".MainActivity">
    <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" /> 
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
    </intent-filter>
    </receiver>
</application>

希望这能有所帮助。

票数 8
EN

Stack Overflow用户

发布于 2011-09-07 14:28:53

如果您未添加以下权限,请在添加这些权限后重试。

代码语言:javascript
复制
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
票数 3
EN

Stack Overflow用户

发布于 2011-09-07 14:54:19

首先,您应该确保您请求权限以获得查看WIFI状态的权限。就照Anup Rojekar说的做。

其次,我认为你在使用BroadcastReceiver时犯了错误。在您的manifest.xml中,声明MainActivity。

代码语言:javascript
复制
<activity 
        android:name=".MainActivity"
            android:label="@string/app_name">
    <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>

所以MainActivy是一种活动。另外,将MainActivity声明为broadcastReceiver。这是非法的。您应该使用独立广播来完成此操作。如下所示:

代码语言:javascript
复制
           <receiver android:name=".WifiBroadcastReceiver">
<intent-filter> 
     <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
</intent-filter>
       </receiver>  

请注意,我更改了broadcastReceiver的名称,在节点内部,您应该添加一个如上所示的<action>节点。

第三,创建一个WifiBroadcastReceiver.java,并将原始MainActivity.java中的代码复制到其中。请记住将类声明更改为public class WifiBroadcastReceiver extends BroadcastReceiver

希望我能帮上忙。请告诉我它能不能用。我手头没有电脑,所以我也不测试代码.

此外,您还需要一个新的MainActivity.java文件。它可以在Eclipse中自动生成。这个类应该像这样声明:public class MainActivity extends Activity

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7329682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档