【问题标题】:Network available check always return false in Android 8.0在 Android 8.0 中,网络可用检查始终返回 false
【发布时间】:2018-08-25 14:45:30
【问题描述】:

我正在使用以下代码进行网络可用检查

    public static boolean isNetworkAvailable(Context context) {
    int[] networkTypes = {ConnectivityManager.TYPE_MOBILE,
            ConnectivityManager.TYPE_WIFI};
    try {
        ConnectivityManager connectivityManager =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        for (int networkType : networkTypes) {
            NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
            if (activeNetworkInfo != null &&
                    activeNetworkInfo.getType() == networkType)
                return true;
        }
    } catch (Exception e) {
        return false;
    }
    return false;
}

相同的代码在所有版本中都能完美运行。但我在 Android Oreo 8.0 中遇到了奇怪的问题

此方法在 Android 8.0 版本中即使网络连接也总是返回 false

设备 - Google Pixel

注意:不知道它的 Android 版本问题或设备问题。

谁帮帮我

【问题讨论】:

  • 试试这个 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { registerReceiver(new ConnectionCheck(), new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")); }
  • 您能否先在您的 catch 块中添加一条日志记录语句,然后再试一次。没有它,就不可能知道您的问题是否是因为异常会提醒您。
  • @Kiskae 我忘了这个。我会尝试更新你

标签: android android-8.0-oreo


【解决方案1】:

解决这个问题的三个步骤。忽略代码格式

  1. 在项目清单文件中添加权限
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  1. 为网络状态检查创建广播接收器

    公共类 NetworkChangeReceiver 扩展 BroadcastReceiver {

    public static ConnectivityReceiverListener connectivityReceiverListener;
    
    public NetworkChangeReceiver() {
        super();
    }
    
    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager cm = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        boolean isConnected = activeNetwork != null
                && activeNetwork.isConnectedOrConnecting();
    
        if (connectivityReceiverListener != null) {
            connectivityReceiverListener.onNetworkConnectionChanged(isConnected);
        }
    }
    
    public static boolean isConnected() {
        ConnectivityManager cm = (ConnectivityManager) Application.getInstance().getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
    }
    
    public interface ConnectivityReceiverListener {
        void onNetworkConnectionChanged(boolean isConnected);
    }
    

    }

  2. 创建静态方法并在应用程序的任何地方使用它

公共静态布尔 isOnline() { 返回 NetworkChangeReceiver.isConnected(); }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多