android.net.wifi.WIFI_STATE_CHANGED 未被广播

标签 android networking broadcastreceiver

在我的应用程序中,如果连接了网络更改,我需要重新启动服务。目前它只能以一种方式工作(wifi 到移动数据),但它不能以另一种方式工作(移动数据到 wifi。)这是为什么?是因为我的广播接收器中没有 android.net.wifi.WIFI_STATE_CHANGED 还是放错了权限?

感谢您的帮助。

代码: 接收方的 list 条目:

<receiver
    android:name="LiveForever"
    android:label="NetworkChangeReceiver" >
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
    </intent-filter>
</receiver>

接收器本身:

public static final int TYPE_WIFI = 1;
public static final int TYPE_MOBILE = 2;
public static final int TYPE_NOT_CONNECTED = 0;
public static final String PREFS_NAME = "cakecloudpreferences";

@Override
public void onReceive(Context context, Intent intent) {
    SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0);
    if (getConnectivityStatus(context)!=0&&!settings.getBoolean("osmframerunning",false)) {
        context.stopService(new Intent(context, OSMFrame.class));
        settings.edit().putBoolean("osmframerunning",false).commit();
        Intent frameintent = new Intent(context,OSMFrame.class);
        frameintent.putExtra("username",settings.getString("usr",""));
        frameintent.putExtra("password",settings.getString("pswd",""));
        frameintent.putExtra("uid",settings.getString("uid",""));
        context.startService(frameintent);
        Log.i("CCLiveForever","LiveForever Triggered, OSMFrame restarted.");
    }
}

public int getConnectivityStatus(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (null != activeNetwork) {
        if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) return TYPE_WIFI;
        if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) return TYPE_MOBILE;
    } 
    return TYPE_NOT_CONNECTED;
}

我列出的相关权限:

  • android.permission.ACCESS_WIFI_STATE
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.INTERNET

再次感谢您!

最佳答案

android.net.wifi.WIFI_STATE_CHANGED 仅在启用或禁用 WiFi 时发送。如果你想在连接到 WiFi 网络或断开连接时接收广播事件,你也需要捕获 android.net.wifi.STATE_CHANGE

关于android.net.wifi.WIFI_STATE_CHANGED 未被广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17929086/

相关文章:

android - ViewPager 上的左右箭头指示符

android - onTouchEvent 如何获取手指下的当前 View

java - 握手前如何写入SSLSocket?

带重组的 R 对角网络(不仅仅是树的分离)

database - AWS 数据库连接被拒绝

java - 无法从微调菜单中获取任何更改颜色的内容

java - 如何使用 retrofit2 将 double 转换为字符串?

android - 为什么 BroadcastReceiver 在使用 MediaPlayer 时会崩溃?

java - 为什么proguard处理AndroidManifest.xml

android - 在设置中收听位置访问禁用/启用