Android:获取4G模块卡运营商、网络类型、数据连接状态和信号格数

代码

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.telephony.PhoneStateListener;
import android.telephony.SignalStrength;
import android.telephony.TelephonyManager;
import android.util.Log;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class MainActivity extends AppCompatActivity {

    String getProvider(@NonNull TelephonyManager mTelephonyManager) {
        String IMSI = "";
        @SuppressLint("MissingPermission")
        String subscriberid = mTelephonyManager.getSubscriberId();
        if (subscriberid != null) {
            IMSI = subscriberid;
        } else {
            IMSI = mTelephonyManager.getSimOperator();
        }

        String ProvidersName = "Unknown";
        if (IMSI != null && 0 != IMSI.compareTo("")) {
            if (IMSI.startsWith("46000") || IMSI.startsWith("46002") || IMSI.startsWith("46007") || IMSI.startsWith("46004")) {
                ProvidersName = "中国移动";
            } else if (IMSI.startsWith("46001") || IMSI.startsWith("46006")) {
                ProvidersName = "中国联通";
            } else if (IMSI.startsWith("46003") || IMSI.startsWith("46011")) {
                ProvidersName = "中国电信";
            } else
                ProvidersName = IMSI;
        } else {
        }

        return ProvidersName;
    }

    String getDataActivity(@NonNull TelephonyManager mTelephonyManager) {
        int activity = mTelephonyManager.getDataActivity();
        if (activity == TelephonyManager.DATA_ACTIVITY_NONE) {
            return "数据连接状态:活动,但无数据发送和接受\n";
        } else if (activity == TelephonyManager.DATA_ACTIVITY_IN) {
            return "数据连接状态:活动,正在接受数据\n";
        } else if (activity == TelephonyManager.DATA_ACTIVITY_OUT) {
            return "数据连接状态:活动,正在发送数据\n";
        } else if (activity == TelephonyManager.DATA_ACTIVITY_INOUT) {
            return "数据连接状态:活动,正在接受和发送数据\n";
        } else {
            return "数据连接状态:未知\n";
        }

    }

    String getCellularType(@NonNull TelephonyManager mTelephonyManager) {
        String cellularType = "";

        int nSubType = mTelephonyManager.getNetworkType();
        if (nSubType == TelephonyManager.NETWORK_TYPE_GPRS
                || nSubType == TelephonyManager.NETWORK_TYPE_EDGE
                || nSubType == TelephonyManager.NETWORK_TYPE_1xRTT
                || nSubType == TelephonyManager.NETWORK_TYPE_CDMA
                || nSubType == TelephonyManager.NETWORK_TYPE_GSM
                || nSubType == TelephonyManager.NETWORK_TYPE_IDEN) {
            cellularType = "2G";
        } else if (nSubType == TelephonyManager.NETWORK_TYPE_UMTS
                || nSubType == TelephonyManager.NETWORK_TYPE_TD_SCDMA
                || nSubType == TelephonyManager.NETWORK_TYPE_EVDO_B
                || nSubType == TelephonyManager.NETWORK_TYPE_HSDPA
                || nSubType == TelephonyManager.NETWORK_TYPE_HSUPA
                || nSubType == TelephonyManager.NETWORK_TYPE_HSPA
                || nSubType == TelephonyManager.NETWORK_TYPE_EVDO_0
                || nSubType == TelephonyManager.NETWORK_TYPE_EVDO_A
                || nSubType == TelephonyManager.NETWORK_TYPE_HSPAP) {
            cellularType = "3G";
        } else if (nSubType == TelephonyManager.NETWORK_TYPE_LTE
                || nSubType == TelephonyManager.NETWORK_TYPE_IWLAN) {
            cellularType = "4G";
//        } else if (nSubType == TelephonyManager.NETWORK_TYPE_NR) {
//            cellularType= "5G";
        } else if (nSubType == TelephonyManager.NETWORK_TYPE_UNKNOWN) {
            cellularType = "0G";
        } else
            cellularType = String.valueOf(nSubType);

        return cellularType;
    }

    private PhoneStateListener listener = new PhoneStateListener() {
        @Override
        public void onSignalStrengthsChanged(@NonNull SignalStrength signalStrength) {

            Log.i("alderaan", "---------------------------\r\n");

            TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

            String providername = getProvider(mTelephonyManager);
            Log.i("alderaan", "运营商为:" + providername);

            String cellulartype = getCellularType(mTelephonyManager);
            Log.i("alderaan", "网络类型为:" + cellulartype);

            String activity = getDataActivity(mTelephonyManager);
            Log.i("alderaan", activity);

            //通过方法反射调用,获取出和系统一样的信号格数
            Method method1 = null;
            try {
                method1 = signalStrength.getClass().getMethod("getLteLevel");
                int level = (int) method1.invoke(signalStrength);

                if (level != 0) {
                    Log.i("alderaan", "当前手机的LTE信号格数:" + level);
                } else {
                    // LTE信号为0时,获取GSM信号强度
                    Method method2 = signalStrength.getClass().getMethod("getGsmLevel");
                    int level2 = (int) method2.invoke(signalStrength);

                    Log.i("alderaan", "当前手机的GSM信号格数:" + level2);
                }

            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }

            super.onSignalStrengthsChanged(signalStrength);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Context context = this.getApplicationContext();

        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

        tm.listen(listener, 290);

    }
}

参考来源

使用TelephonyManager获取移动网络信息
Android 获取4G信号强度的方法

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要显示物理机两张所属运营商以及所用网络网络信号强度,需要使用TelephonyManager类和SignalStrength类。以下是代码示例: ```java TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); // 获取SIM1信息 int simState1 = telephonyManager.getSimState(0); if (simState1 == TelephonyManager.SIM_STATE_READY) { // 获取运营商名称 String operator1 = telephonyManager.getSimOperatorName(0); // 获取网络类型 String networkType1 = getNetworkType(telephonyManager.getNetworkType(0)); // 获取信号强度 int signalStrength1 = getSignalStrength(telephonyManager.getSignalStrength(0)); Log.d("SIM1", "Operator: " + operator1 + ", Network Type: " + networkType1 + ", Signal Strength: " + signalStrength1); } // 获取SIM2信息 int simState2 = telephonyManager.getSimState(1); if (simState2 == TelephonyManager.SIM_STATE_READY) { // 获取运营商名称 String operator2 = telephonyManager.getSimOperatorName(1); // 获取网络类型 String networkType2 = getNetworkType(telephonyManager.getNetworkType(1)); // 获取信号强度 int signalStrength2 = getSignalStrength(telephonyManager.getSignalStrength(1)); Log.d("SIM2", "Operator: " + operator2 + ", Network Type: " + networkType2 + ", Signal Strength: " + signalStrength2); } // 网络类型转换 private String getNetworkType(int networkType) { switch (networkType) { case TelephonyManager.NETWORK_TYPE_GPRS: return "GPRS"; case TelephonyManager.NETWORK_TYPE_EDGE: return "EDGE"; case TelephonyManager.NETWORK_TYPE_UMTS: return "UMTS"; case TelephonyManager.NETWORK_TYPE_HSDPA: return "HSDPA"; case TelephonyManager.NETWORK_TYPE_HSUPA: return "HSUPA"; case TelephonyManager.NETWORK_TYPE_HSPA: return "HSPA"; case TelephonyManager.NETWORK_TYPE_CDMA: return "CDMA"; case TelephonyManager.NETWORK_TYPE_EVDO_0: return "EVDO_0"; case TelephonyManager.NETWORK_TYPE_EVDO_A: return "EVDO_A"; case TelephonyManager.NETWORK_TYPE_EVDO_B: return "EVDO_B"; case TelephonyManager.NETWORK_TYPE_LTE: return "LTE"; default: return "Unknown"; } } // 信号强度转换 private int getSignalStrength(SignalStrength signalStrength) { if (signalStrength == null) { return 0; } else { int level = signalStrength.getLevel(); switch (level) { case 0: return -113; case 1: return -87; case 2: return -75; case 3: return -67; case 4: return -51; default: return 0; } } } ``` 在上面的代码中,我们首先使用TelephonyManager类获取物理机的SIM状态和信息。然后,我们使用getNetworkType()和getSignalStrength()方法将网络类型信号强度转换为易于理解的字符串和整数。最后,我们使用Log.d()方法将结果打印到控制台。请注意,getSignalStrength()方法返回的是整数,表示信号强度的负值,例如“-87”表示信号强度为“-87dBm”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值