查看安卓系统中Wi-Fi和移动数据连接的各种模式。

问题描述 投票:1回答:1

我想为Wi-Fi连接和移动数据的不同模式写一个事件。

  1. 如果Wi-Fi开启,而移动数据关闭,Wi-Fi图标就会显示出来。
  2. 如果移动数据开启而Wi-Fi关闭,则会看到移动数据图标。
  3. 如果两者都开启,则两个图标都将可见。
  4. 如果两者都关闭,图标将消失。
  5. 如果两个都开着,其中一个熄灭了,熄灭的图标就会熄灭。

和手机的系统性能一模一样!

public class NetworkReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        final ConnectivityManager cm = (ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE);
        final android.net.NetworkInfo wifiType = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        final android.net.NetworkInfo mobileType = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

        if (wifiType.isConnectedOrConnecting()) {
            wifi.setVisibility(View.VISIBLE);
        } else if (mobileType.isConnectedOrConnecting()) {
            data.setVisibility(View.VISIBLE);
        } else if (wifiType.isConnectedOrConnecting() || mobileType.isConnectedOrConnecting()) {
            wifi.setVisibility(View.VISIBLE);
            data.setVisibility(View.VISIBLE);
        } else {
            wifi.setVisibility(View.GONE);
            data.setVisibility(View.GONE);
        }

    }

}
java android android-wifi internet-connection mobile-data
1个回答
0
投票

你必须修改你的代码才能正常工作。

public class NetworkReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
        assert connectivityManager != null;
        NetworkInfo[] activeNetworkInfo = connectivityManager.getAllNetworkInfo();
        for (NetworkInfo ni : activeNetworkInfo) {
            if (ni.getTypeName().equalsIgnoreCase("WIFI"))
                if (ni.isConnected())
                   {
                    wifi.setVisibility(View.VISIBLE);
                   } else if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
                if (ni.isConnected())
                   { 
                    data.setVisibility(View.VISIBLE);
                   }else {
            wifi.setVisibility(View.GONE);
            data.setVisibility(View.GONE);
        }
    }
}

确保你添加这行到你的清单。

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

我也认为,你错了 当你添加这个代码。

 else if (wifiType.isConnectedOrConnecting() || mobileType.isConnectedOrConnecting()) {
            wifi.setVisibility(View.VISIBLE);
            data.setVisibility(View.VISIBLE);
        } 

它没有任何意义,因为你已经测试 如果他们中的一个是连接,所以我建议改变代码代替。

public class NetworkReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
        assert connectivityManager != null;
        NetworkInfo[] activeNetworkInfo = connectivityManager.getAllNetworkInfo();
        for (NetworkInfo ni : activeNetworkInfo) {
            if (ni.getTypeName().equalsIgnoreCase("WIFI"))
                if (ni.isConnected())
                   {
                    wifi.setVisibility(View.VISIBLE);
                   } else {
                      wifi.setVisibility(View.GONE);
                      }
            if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
                  if (ni.isConnected())
                   { 
                    data.setVisibility(View.VISIBLE);
                   }
                 else {
            data.setVisibility(View.GONE);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.