【问题标题】:WifiManager.NETWORK_STATE_CHANGED_ACTION not received未收到 WifiManager.NETWORK_STATE_CHANGED_ACTION
【发布时间】:2018-12-19 11:24:37
【问题描述】:

我想知道设备何时连接到 Wi-Fi 网络。 问题是我没有收到来自 WifiManager.NETWORK_STATE_CHANGED_ACTION

的任何 Intent
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);

    LocalBroadcastManager.getInstance(this).registerReceiver(MainActivity.wifiBroadcastReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            Log.i("LOG", "onReceive"); // This is never executed
        }
    }, intentFilter);
}

权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

WifiManager.NETWORK_STATE_CHANGED_ACTION 是否需要其他一些权限?

【问题讨论】:

    标签: android android-intent permissions wifi state


    【解决方案1】:

    这里LocalBroadcastManager 不起作用。 LocalBroadcastManager 只会监听通过 LocalBroadcastManager 发送的意图。但是NETWORK_STATE_CHANGED_ACTION会被系统广播,所以需要注册动态BroadcastReceiver来监听NETWORK_STATE_CHANGED_ACTION


    例如..

    在你的 Activity 中定义一个 BroadcastReceiver 为

    private BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
                Log.i("Wi-Fi network state", info.getDetailedState().toString());
            }
        };
    

    并注册和注销它为

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            ......
    
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
            registerReceiver(receiver, intentFilter);
        }
    
        @Override
        protected void onDestroy() {
            unregisterReceiver(receiver);
            super.onDestroy();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多