以下方法,双卡双待手机,存在中国移动和中国联通时,只能读到中国移动的信号。

单SIM卡,不影响。

package com.invt.signaltest;

import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.telephony.CellInfo;
import android.telephony.CellInfoCdma;
import android.telephony.CellInfoGsm;
import android.telephony.CellInfoLte;
import android.telephony.CellInfoWcdma;
import android.telephony.CellSignalStrength;
import android.telephony.CellSignalStrengthLte;
import android.telephony.PhoneStateListener;
import android.telephony.SignalStrength;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.Log;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    private TelephonyManager phoneManager;
    private MyPhoneStateListener myPhoneStateListener;
    private final static int REQUEST_CODE = 10001;

    @RequiresApi(api = Build.VERSION_CODES.Q)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myPhoneStateListener = new MyPhoneStateListener();
        phoneManager = (TelephonyManager)this.getSystemService(this.TELEPHONY_SERVICE);

        //动态获取权限
        this.checkPermission();

    }

    /**
     * 动态获取权限
     */
    @RequiresApi(api = Build.VERSION_CODES.Q)
    private void checkPermission(){
        //判断权限
        if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ||
                PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) ||
                PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)) {
            //申请获取权限
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.READ_PHONE_STATE}, REQUEST_CODE);
        }else{
            //执行授权后的其他操作
            try {
                phoneManager.listen(myPhoneStateListener,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS | PhoneStateListener.LISTEN_CELL_INFO);

            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_CODE){
            try {
                phoneManager.listen(myPhoneStateListener,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS | PhoneStateListener.LISTEN_CELL_INFO);

            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    class MyPhoneStateListener extends PhoneStateListener {

        @RequiresApi(api = Build.VERSION_CODES.Q)
        @Override
        public void onSignalStrengthsChanged(SignalStrength signalStrength) {
            super.onSignalStrengthsChanged(signalStrength);

            Log.e("onSignalStrengthsChanged:: ", signalStrength.toString());

            List<CellSignalStrength> allCellSignalStrength = signalStrength.getCellSignalStrengths();

            Log.e("onSignalStrengthsChanged:: ", allCellSignalStrength.toString());

            Log.e("ddd... ", phoneManager.getNetworkOperatorName());
            Log.e("ddd... ", String.valueOf(phoneManager.getPhoneCount()));
            Log.e("ddd... ", phoneManager.getSimOperatorName());

            CellSignalStrength cellSignalStrength = allCellSignalStrength.get(0);
            if (cellSignalStrength instanceof CellSignalStrengthLte){
                CellSignalStrengthLte cellSignalStrengthLte = (CellSignalStrengthLte) cellSignalStrength;
                Log.e("onSignalStrengthsChanged Rsrq:: ", String.valueOf(cellSignalStrengthLte.getRsrq()));
                Log.e("onSignalStrengthsChanged Rssi:: ", String.valueOf(cellSignalStrengthLte.getRssi()));
                Log.e("onSignalStrengthsChanged Rsrp:: ", String.valueOf(cellSignalStrengthLte.getRsrp()));
                Log.e("onSignalStrengthsChanged Rssnr:: ", String.valueOf(cellSignalStrengthLte.getRssnr()));
                Log.e("onSignalStrengthsChanged Cqi:: ", String.valueOf(cellSignalStrengthLte.getCqi()));
                Log.e("onSignalStrengthsChanged Dbm:: ", String.valueOf(cellSignalStrengthLte.getDbm()));
                Log.e("onSignalStrengthsChanged AsuLevel:: ", String.valueOf(cellSignalStrengthLte.getAsuLevel()));
                Log.e("onSignalStrengthsChanged TimingAdvance:: ", String.valueOf(cellSignalStrengthLte.getTimingAdvance()));
            }
        }

        @Override
        public void onCellInfoChanged(List<CellInfo> cellInfos) {
            super.onCellInfoChanged(cellInfos);

            Log.e("onSignalStrengthsChanged:: ", cellInfos.toString());

            for (CellInfo cellInfo : cellInfos) {
                if (!cellInfo.isRegistered()) {
                    continue;
                }
                if (cellInfo instanceof CellInfoLte) {

                    CellInfoLte lteinfo = (CellInfoLte) cellInfo;

//                    lte_MCC = lteinfo.getCellIdentity().getMcc();
//                    lte_MNC = lteinfo.getCellIdentity().getMnc();
//                    lte_CI = lteinfo.getCellIdentity().getCi();
//                    lte_PCI = lteinfo.getCellIdentity().getPci();
//                    lte_TAC = lteinfo.getCellIdentity().getTac();
                    Log.e("onCellInfoChanged:: ",lteinfo.toString());

                } else if (cellInfo instanceof CellInfoCdma) {

                    CellInfoCdma cdmainfo = (CellInfoCdma) cellInfo;

//                    cdma_SID = cdmainfo.getCellIdentity().getSystemId();
//                    cdma_NID = cdmainfo.getCellIdentity().getNetworkId();
//                    cdma_BSID = cdmainfo.getCellIdentity().getBasestationId();

                    Log.e("onCellInfoChanged:: ",cdmainfo.toString());
                } else if (cellInfo instanceof CellInfoGsm) {
                    CellInfoGsm gsmInfo = (CellInfoGsm) cellInfo;

//                    gsm_MCC = gsmInfo.getCellIdentity().getMcc();
//                    gsm_MNC = gsmInfo.getCellIdentity().getMnc();
//                    gsm_CID = gsmInfo.getCellIdentity().getCid();
//                    gsm_LAC = gsmInfo.getCellIdentity().getLac();
                    Log.e("onCellInfoChanged:: ",gsmInfo.toString());
                } else if (cellInfo instanceof CellInfoWcdma) {
                    CellInfoWcdma wcdmaInfo = (CellInfoWcdma) cellInfo;

//                    wcdma_MCC = wcdmaInfo.getCellIdentity().getMcc();
//                    wcdma_MNC = wcdmaInfo.getCellIdentity().getMnc();
//                    wcdma_CID = wcdmaInfo.getCellIdentity().getCid();
//                    wcdma_LAC = wcdmaInfo.getCellIdentity().getLac();
//                    wcdma_PSC = wcdmaInfo.getCellIdentity().getPsc();
                    Log.e("onCellInfoChanged:: ",wcdmaInfo.toString());
                }


            }
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(phoneManager != null){
            phoneManager.listen(myPhoneStateListener,PhoneStateListener.LISTEN_NONE);
        }
    }
}

需要的权限:

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

完!!!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐