android获取LTE信息

 

1.mainactivity

package com.npsmaster.phoneinfo;

import android.content.Context;
import android.os.Message;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.telephony.CellInfo;
import android.telephony.CellInfoGsm;
import android.telephony.CellInfoLte;
import android.telephony.CellInfoWcdma;
import android.telephony.PhoneStateListener;
import android.telephony.SignalStrength;
import android.telephony.TelephonyManager;
import android.telephony.gsm.GsmCellLocation;
import android.widget.TextView;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.OrientationHelper;
import android.support.v7.widget.RecyclerView;

import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class MainActivity extends AppCompatActivity
{
public static final int NP_CELL_INFO_UPDATE = 1001;
private PhoneInfoThread phoneInfoThread;
public Handler mMainHandler;
// for current
public PhoneGeneralInfo phoneGeneralInfo;
public CellGeneralInfo serverCellInfo;
//for history
private List<CellGeneralInfo> HistoryServerCellList;
private CellnfoRecycleViewAdapter historyRecycleViewAdapter;
private RecyclerView historyrecyclerView;
TelephonyManager phoneManager ;
private MyPhoneStateListener myPhoneStateListener;

void InitProcessThread()
{
mMainHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
if(msg.what == NP_CELL_INFO_UPDATE)
{
Bundle bundle = msg.getData();
TextView tvTime = (TextView)findViewById(R.id.tvTimeleaps);
Date now = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
tvTime.setText(formatter.format(now));
historyRecycleViewAdapter.notifyDataSetChanged();

TextView tvDeviceId = (TextView)findViewById(R.id.tvDeviceId);
tvDeviceId.setText("DeviceId:" + phoneGeneralInfo.deviceId);

TextView tvRatType = (TextView)findViewById(R.id.tvRatType);
tvRatType.setText("RatType:"+phoneGeneralInfo.ratType);

TextView tvMnc = (TextView)findViewById(R.id.tMnc);
tvMnc.setText("Mnc:"+phoneGeneralInfo.mnc);

TextView tvMcc = (TextView)findViewById(R.id.tvMcc);
tvMcc.setText("Mcc:"+phoneGeneralInfo.mcc);

TextView tvOperatorName = (TextView)findViewById(R.id.tvOperaterName);
tvOperatorName.setText("Operator:"+phoneGeneralInfo.operaterName);

TextView tvSdk = (TextView)findViewById(R.id.tvSdk);
tvSdk.setText("Sdk:"+phoneGeneralInfo.sdk);

TextView tvImsi = (TextView)findViewById(R.id.tvImsi);
tvImsi.setText("Imsi:"+phoneGeneralInfo.Imsi);

TextView tvSerialNum = (TextView)findViewById(R.id.tvSerialNum);
tvSerialNum.setText("SN:"+phoneGeneralInfo.serialNumber);

TextView tvModel = (TextView)findViewById(R.id.tvModel);
tvModel.setText("Model:" + phoneGeneralInfo.phoneModel);

TextView tvSoftwareVersion = (TextView)findViewById(R.id.tvSoftware);
tvSoftwareVersion.setText("Version:" + phoneGeneralInfo.deviceSoftwareVersion);

TextView tvAllCellInfo = (TextView)findViewById(R.id.tvStaticInfoLableHistory);
tvAllCellInfo.setText("History cells list("+HistoryServerCellList.size()+")");

}
super.handleMessage(msg);
}
};

phoneInfoThread = new PhoneInfoThread(MainActivity.this);
phoneInfoThread.start();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
serverCellInfo = new CellGeneralInfo();
phoneGeneralInfo = new PhoneGeneralInfo();
myPhoneStateListener = new MyPhoneStateListener();
phoneManager = (TelephonyManager)this.getSystemService(this.TELEPHONY_SERVICE);
phoneManager.listen(myPhoneStateListener,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
//
HistoryServerCellList = new ArrayList<CellGeneralInfo>();
historyrecyclerView = (RecyclerView)findViewById(R.id.historyrcv);
LinearLayoutManager historylayoutManager = new LinearLayoutManager(this);
historylayoutManager.setOrientation(OrientationHelper.VERTICAL);
historyrecyclerView.setLayoutManager(historylayoutManager);
historyRecycleViewAdapter = new CellnfoRecycleViewAdapter(MainActivity.this,HistoryServerCellList);
historyrecyclerView.setAdapter(historyRecycleViewAdapter);
historyrecyclerView.setItemAnimator(new DefaultItemAnimator());

InitProcessThread();

}

public void updateServerCellView()
{
TextView tvCellType = (TextView)findViewById(R.id.tvCellType);
tvCellType.setText("Rat:" + serverCellInfo.type);

TextView tvTac = (TextView)findViewById(R.id.tvTac);
tvTac.setText("Tac:" + serverCellInfo.tac);

TextView tvCellId = (TextView)findViewById(R.id.tvCellId);
tvCellId.setText("Ci:" + serverCellInfo.CId);

TextView tvPCI = (TextView)findViewById(R.id.tvPCI);
tvPCI.setText("Pci:" + serverCellInfo.pci);

TextView tvRsrp = (TextView)findViewById(R.id.tvRsrp);
tvRsrp.setText("Rsrp:" + serverCellInfo.rsrp);

TextView tvRsrq = (TextView)findViewById(R.id.tvRsrq);
tvRsrq.setText("Rsrp:" + serverCellInfo.rsrq);

TextView tvSINR = (TextView)findViewById(R.id.tvSINR);
tvSINR.setText("Sinr:" + serverCellInfo.sinr);

TextView tvCqi = (TextView)findViewById(R.id.tvCqi);
tvCqi.setText("cqi:" + serverCellInfo.cqi);

TextView tvGetCellType = (TextView)findViewById(R.id.tvGetCellType);
tvGetCellType.setText("type:" + serverCellInfo.getInfoType);
}

class PhoneGeneralInfo
{
public String serialNumber;
public String operaterName;
public String operaterId;
public String deviceId;
public String deviceSoftwareVersion;
public String Imsi;
public String Imei;
public int mnc;
public int mcc;
public int ratType= TelephonyManager.NETWORK_TYPE_UNKNOWN;
public int phoneDatastate;
public String phoneModel;
public int sdk;
}
class CellGeneralInfo implements Cloneable
{
public int type;
public int CId;
public int lac;
public int tac;
public int psc;
public int pci;
public int RatType= TelephonyManager.NETWORK_TYPE_UNKNOWN;
public int rsrp;
public int rsrq;
public int sinr;
public int rssi;
public int cqi;
public int asulevel;
public int getInfoType;
public String time;

@Override

public Object clone()
{
CellGeneralInfo cellinfo = null;
try
{
cellinfo = (CellGeneralInfo)super.clone();
}
catch(CloneNotSupportedException e)
{
e.printStackTrace();
}
return cellinfo;
}
}

class MyPhoneStateListener extends PhoneStateListener
{
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength)
{
super.onSignalStrengthsChanged(signalStrength);
getPhoneGeneralInfo();
getServerCellInfo();
if (phoneGeneralInfo.ratType == TelephonyManager.NETWORK_TYPE_LTE)
{
try {
serverCellInfo.rssi = (Integer) signalStrength.getClass().getMethod("getLteSignalStrength").invoke(signalStrength);
serverCellInfo.rsrp = (Integer) signalStrength.getClass().getMethod("getLteRsrp").invoke(signalStrength);
serverCellInfo.rsrq = (Integer) signalStrength.getClass().getMethod("getLteRsrq").invoke(signalStrength);
serverCellInfo.sinr = (Integer) signalStrength.getClass().getMethod("getLteRssnr").invoke(signalStrength);
serverCellInfo.cqi = (Integer) signalStrength.getClass().getMethod("getLteCqi").invoke(signalStrength);
} catch (Exception e) {
e.printStackTrace();
return;
}
}
else if (phoneGeneralInfo.ratType == TelephonyManager.NETWORK_TYPE_GSM)
{
try {
serverCellInfo.rssi = signalStrength.getGsmSignalStrength();
serverCellInfo.rsrp = (Integer) signalStrength.getClass().getMethod("getGsmDbm").invoke(signalStrength);
serverCellInfo.asulevel =(Integer) signalStrength.getClass().getMethod("getAsuLevel").invoke(signalStrength);
} catch (Exception e) {
e.printStackTrace();
return;
}
}
else if (phoneGeneralInfo.ratType == TelephonyManager.NETWORK_TYPE_TD_SCDMA)
{
try {
serverCellInfo.rssi = (Integer) signalStrength.getClass().getMethod("getTdScdmaLevel").invoke(signalStrength);
serverCellInfo.rsrp = (Integer) signalStrength.getClass().getMethod("getTdScdmaDbm").invoke(signalStrength);
serverCellInfo.asulevel =(Integer) signalStrength.getClass().getMethod("getAsuLevel").invoke(signalStrength);
} catch (Exception e) {
e.printStackTrace();
return;
}
}
Date now = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("hh:mm:ss");
serverCellInfo.time = formatter.format(now);
updateHistoryCellList(serverCellInfo);
updateServerCellView();
}

public void getPhoneGeneralInfo()
{
phoneGeneralInfo.operaterName = phoneManager.getNetworkOperatorName();
phoneGeneralInfo.operaterId = phoneManager.getNetworkOperator();
phoneGeneralInfo.mnc = Integer.parseInt(phoneGeneralInfo.operaterId.substring(0, 3));
phoneGeneralInfo.mcc = Integer.parseInt(phoneGeneralInfo.operaterId.substring(3));
phoneGeneralInfo.phoneDatastate = phoneManager.getDataState();
phoneGeneralInfo.deviceId = phoneManager.getDeviceId();
phoneGeneralInfo.Imei = phoneManager.getSimSerialNumber();
phoneGeneralInfo.Imsi = phoneManager.getSubscriberId();
phoneGeneralInfo.serialNumber = phoneManager.getSimSerialNumber();
phoneGeneralInfo.deviceSoftwareVersion = android.os.Build.VERSION.RELEASE;
phoneGeneralInfo.phoneModel = android.os.Build.MODEL;
phoneGeneralInfo.ratType = phoneManager.getNetworkType();
phoneGeneralInfo.sdk = android.os.Build.VERSION.SDK_INT;
}

public void getServerCellInfo()
{
try
{
List<CellInfo> allCellinfo;
allCellinfo = phoneManager.getAllCellInfo();
if (allCellinfo != null)
{
CellInfo cellInfo = allCellinfo.get(0);
serverCellInfo.getInfoType = 1;
if (cellInfo instanceof CellInfoGsm)
{
CellInfoGsm cellInfoGsm = (CellInfoGsm) cellInfo;
serverCellInfo.CId = cellInfoGsm.getCellIdentity().getCid();
serverCellInfo.rsrp = cellInfoGsm.getCellSignalStrength().getDbm();
serverCellInfo.asulevel = cellInfoGsm.getCellSignalStrength().getAsuLevel();
serverCellInfo.lac = cellInfoGsm.getCellIdentity().getLac();
serverCellInfo.RatType = TelephonyManager.NETWORK_TYPE_GSM;
} else if (cellInfo instanceof CellInfoWcdma)
{
CellInfoWcdma cellInfoWcdma = (CellInfoWcdma) cellInfo;
serverCellInfo.CId = cellInfoWcdma.getCellIdentity().getCid();
serverCellInfo.psc = cellInfoWcdma.getCellIdentity().getPsc();
serverCellInfo.lac = cellInfoWcdma.getCellIdentity().getLac();
serverCellInfo.rsrp = cellInfoWcdma.getCellSignalStrength().getDbm();
serverCellInfo.asulevel = cellInfoWcdma.getCellSignalStrength().getAsuLevel();
serverCellInfo.RatType = TelephonyManager.NETWORK_TYPE_UMTS;
} else if (cellInfo instanceof CellInfoLte)
{
CellInfoLte cellInfoLte = (CellInfoLte) cellInfo;
serverCellInfo.CId = cellInfoLte.getCellIdentity().getCi();
serverCellInfo.pci = cellInfoLte.getCellIdentity().getPci();
serverCellInfo.tac = cellInfoLte.getCellIdentity().getTac();
serverCellInfo.rsrp = cellInfoLte.getCellSignalStrength().getDbm();
serverCellInfo.asulevel = cellInfoLte.getCellSignalStrength().getAsuLevel();
serverCellInfo.RatType = TelephonyManager.NETWORK_TYPE_LTE;
}
}
else
//for older devices
{
getServerCellInfoOnOlderDevices();
}
}
catch(Exception e)
{
getServerCellInfoOnOlderDevices();
}

}
void getServerCellInfoOnOlderDevices()
{
GsmCellLocation location = (GsmCellLocation) phoneManager.getCellLocation();
serverCellInfo.getInfoType = 0;
serverCellInfo.CId = location.getCid();
serverCellInfo.tac = location.getLac();
serverCellInfo.psc = location.getPsc();
serverCellInfo.type = phoneGeneralInfo.ratType;
}

void updateHistoryCellList(CellGeneralInfo serverinfo)
{
CellGeneralInfo newcellInfo = (CellGeneralInfo)serverinfo.clone();
HistoryServerCellList.add(newcellInfo);
}
}
class PhoneInfoThread extends Thread
{
private Context context;
public int timecount;
public PhoneInfoThread(Context context)
{
this.context = context;
timecount = 0;
}

public void run()
{
while (true) {
try {
timecount++;
Message message = new Message();
message.what = NP_CELL_INFO_UPDATE;
Bundle bundle = new Bundle();
bundle.putString("UPDATE", "UPDATE_TIME");
message.setData(bundle);
mMainHandler.sendMessage(message);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}


2. main layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.npsmaster.phoneinfo.MainActivity">
<!--start-->
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/childlayout"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffcccccc"
android:layout_margin="1dp">
<!-- line1 -->
<TableRow
android:layout_width="match_parent"
android:layout_height="20dp"
android:background="#ffcccccc"
android:layout_margin="0.5dp">

<TextView
android:text="General Information"
android:layout_marginTop="5dp"
android:layout_width="0.0dp"
android:layout_height="20dp"
android:layout_weight="1"
android:id="@+id/tvStaticInfoLable">
</TextView>
<TextView
android:text="Time:"
android:layout_marginTop="5dp"
android:layout_width="0.0dp"
android:layout_height="20dp"
android:layout_weight="1"
android:id="@+id/tvTimeleaps">
</TextView>
</TableRow>
<!--line2-->
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffffcc99"
android:layout_margin="0.5dp">
<TextView
android:text="Operater:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:id="@+id/tvOperaterName"
android:textSize="12dp"
android:layout_weight="1"/>

<TextView
android:text="RatType:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:id="@+id/tvRatType"
android:textSize="12dp"
android:layout_weight="1"/>
</TableRow>
<!-- line3 -->
<TableRow
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:background="#ffffcc99"
android:layout_margin="0.5dp">
<TextView
android:text="mnc"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:textSize="12dp"
android:layout_weight="1"
android:id="@+id/tMnc" />
<TextView
android:text="mcc:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/tvMcc"
android:textSize="12dp">
</TextView>
</TableRow>
<!--line4-->
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffffcc99"
android:layout_margin="0.5dp">
<TextView
android:text="Imsi"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvImsi" />
<TextView
android:text="SDK:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:id="@+id/tvSdk"
android:layout_weight="1"
android:textSize="12dp"/>
</TableRow>
<!--line5-->
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffffcc99"
android:layout_margin="0.5dp">
<TextView
android:text="DeviceId"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvDeviceId" />
<TextView
android:text="SN:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvSerialNum"
android:layout_margin="0.5dp" />
</TableRow>
<!--line6-->
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffffcc99"
android:layout_margin="0.5dp">
<TextView
android:text="software:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvSoftware" />
<TextView
android:text="Model:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvModel"
android:layout_margin="0.5dp" />
</TableRow>
</TableLayout>
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffcccccc"
android:layout_margin="0dp">
<!--line6-->
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffcccccc"
android:layout_margin="0.5dp">
<TextView
android:text="Serving cell information"
android:layout_marginTop="5dp"
android:layout_width="match_parent"
android:layout_height="20dp"
android:id="@+id/tvStaticInfoLable">
</TextView>
</TableRow>
<!-- title -->
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffffcc99"
android:layout_margin="0.5dp">
<TextView
android:text="Rat:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvCellType" />
<TextView
android:text="Tac:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvTac" />
<TextView
android:text="CI:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvCellId" />
</TableRow>
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffffcc99"
android:layout_margin="0.5dp">
<TextView
android:text="Rsrp:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvRsrp" />
<TextView
android:text="Rsrq:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvRsrq" />
<TextView
android:text="SINR:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvSINR" />

</TableRow>
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffffcc99"
android:layout_margin="0.5dp">
<TextView
android:text="PCI/PSC:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvPCI" />
<TextView
android:text="CQI:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvCqi" />
<TextView
android:text="type:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvGetCellType"/>
</TableRow>
</TableLayout>
<!-- history services cell info -->
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffcccccc"
android:layout_margin="1dp">
<TextView
android:text="History cells information:"
android:layout_marginTop="5dp"
android:layout_width="match_parent"
android:layout_height="20dp"
android:id="@+id/tvStaticInfoLableHistory">
</TextView>
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffffcc99"
android:layout_margin="0.5dp">
<TextView
android:text="Type:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvhistoryCellType" />
<TextView
android:text="Tac:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvhistoryTac" />
<TextView
android:text="CI:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvhistoryCellId" />
<TextView
android:text="PCI/PSC:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvhistoryPCI" />
<TextView
android:text="dBm:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvhistorydBm" />
<TextView
android:text="asulevel:"
android:layout_width="0.0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textSize="12dp"
android:id="@+id/tvhistoryasuLevel " />
</TableRow>
</TableLayout>


<android.support.v7.widget.RecyclerView
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="#ffff0000"
android:dividerHeight="10dp"
android:id="@+id/historyrcv"/>
</LinearLayout>
</RelativeLayout>

---------------------
作者:xgray
来源:CSDN
原文:https://blog.csdn.net/xgray/article/details/54669943
版权声明:本文为博主原创文章,转载请附上博文链接!

posted on 2018-12-20 21:48  hmms  阅读(1603)  评论(0编辑  收藏  举报

导航