Android获取移动网络(2G/3G/4G)信号强度
·
以下方法,双卡双待手机,存在中国移动和中国联通时,只能读到中国移动的信号。
单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" />
完!!!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)