android - 检查可用移动网络的正确方法是什么(无数据连接)

标签 android

在 Android 上检查移动网络 (GSM) 连接是否可用的正确方法是什么? (>2.1) 我不想检查移动网络上是否有可用的数据连接,只是检查一般的网络可用性。 (检查是否可以通过移动网络调用电话)

目前我正在使用以下检查:

public static boolean checkMobileNetworkAvailable(Context context){
    TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    int networkType = tm.getNetworkType();
    return (networkType != TelephonyManager.NETWORK_TYPE_UNKNOWN);
}

但似乎某些设备总是报告“NETWORK_TYPE_UNKNOWN”。所以检查一直失败。

有更好的方法吗?

更新:

下面的方法会更好吗?

    public static boolean checkMobileNetworkAvailable(Context context){
       boolean isMobileNetworkAvailable = false;
       ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
       NetworkInfo[] networks = cm.getAllNetworkInfo();
       for(int i=0;i<networks.length;i++){
        if(networks[i].getType() == ConnectivityManager.TYPE_MOBILE){
              if(networks[i].isAvailable()){
                isMobileNetworkAvailable = true;
              }
            }
        }

    return isMobileNetworkAvailable;
}

最佳答案

我使用以下代码来了解我是否已连接到网络(无移动数据):

    public static Boolean isMobileAvailable(Context appcontext) {       
    TelephonyManager tel = (TelephonyManager) appcontext.getSystemService(Context.TELEPHONY_SERVICE);       
    return ((tel.getNetworkOperator() != null && tel.getNetworkOperator().equals("")) ? false : true);      
}

仅当手机实际注册到网络时才返回 NetworkOperator。

关于android - 检查可用移动网络的正确方法是什么(无数据连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6435861/

相关文章:

Android多语言支持

java - 如何在android中检索包含特定单词的联系人姓名?

android - 如何让 ConstraintLayout 为 RTL 正常工作?

android - Gradle构建顺序

java - 使用西方数字的货币格式

android - 将 Android 中的标记从一个位置移动到另一个位置?

android - MvxBindableLinearLayout ItemsSource 绑定(bind)问题

java - 检查字符串是否为空不起作用

android - fill_parent 不填充父级?

java - 用于 Android 中网络通信的最佳包.. Java/Apache?