Android10监听信号强度

2,537 阅读1分钟

Build.VERSION.SDK_INT < Build.VERSION_CODES.Q 之前的版本的写法

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

 mTelephonyManager.listen(new PhoneStateListener(){
     @Override
    public void onSignalStrengthsChanged(SignalStrength signalStrength) {
       super.onSignalStrengthsChanged(signalStrength);
       try {
            int signalLevel = signalStrength.getLevel();
            Log.d(TAG, "onSignalStrengthsChanged: signalLevel "+signalLevel);
       } catch (Exception e) {
           //TODO: handle exception
       }
    
    }

 },PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);

Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q 版本的写法

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

SubscriptionInfo info = getNewerSlotSubscriptionInfo(0);//获取指定卡槽的信号强度
  
//区别就在这里,要再次获取指定卡槽的TelephonyManager
TelephonyManager mTelephonyManagerForSubscriptionId = mTelephonyManager.createForSubscriptionId(info.getSubscriptionId());

mTelephonyManagerForSubscriptionId.listen(new PhoneStateListener(){
     @Override
    public void onSignalStrengthsChanged(SignalStrength signalStrength) {
       super.onSignalStrengthsChanged(signalStrength);
       try {
            int signalLevel = signalStrength.getLevel();
            Log.d(TAG, "onSignalStrengthsChanged: signalLevel "+signalLevel);
       } catch (Exception e) {
           //TODO: handle exception
       }
    
    }

 },PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
 
 
 public synchronized SubscriptionInfo getNewerSlotSubscriptionInfo(int slot) {

    if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {

       List<SubscriptionInfo>  list = SubscriptionManager.from(mContext).getActiveSubscriptionInfoList();
        if (list != null) {
            for (SubscriptionInfo info : list) {
                if (slot == info.getSimSlotIndex()) {
                    LogUtils.d("SlotIndex : " + info.getSimSlotIndex() + " displayName : " + info.getDisplayName());
                return info;
                    }
            }
        }
    }
    return null;
}

几个重要的Import

import android.telephony.PhoneStateListener;
import android.telephony.SignalStrength;
import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;

结语

以上代码都是手动敲的,如有错误,还请指出