这是indexloc提供的服务,不要输入任何密码
Skip to content

Commit dc89cd6

Browse files
jdesai61ctsGrimler91
authored andcommitted
TelephonyAPI: add 5G NR radio support and additional fields for LTE
1 parent a857483 commit dc89cd6

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

app/src/main/java/com/termux/api/TelephonyAPI.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
import android.telephony.CellInfoGsm;
1111
import android.telephony.CellInfoLte;
1212
import android.telephony.CellInfoWcdma;
13+
import android.telephony.CellInfoNr;
14+
import android.telephony.CellIdentityNr;
15+
import android.telephony.CellSignalStrength;
16+
import android.telephony.CellSignalStrengthNr;
1317
import android.telephony.TelephonyManager;
1418
import android.util.JsonWriter;
1519
import android.util.Log;
@@ -28,6 +32,18 @@ public class TelephonyAPI {
2832
private static void writeIfKnown(JsonWriter out, String name, int value) throws IOException {
2933
if (value != Integer.MAX_VALUE) out.name(name).value(value);
3034
}
35+
private static void writeIfKnown(JsonWriter out, String name, long value) throws IOException {
36+
if (value != Long.MAX_VALUE) out.name(name).value(value);
37+
}
38+
private static void writeIfKnown(JsonWriter out, String name, int value[]) throws IOException {
39+
if (value != null) {
40+
out.name(name);
41+
out.beginArray();
42+
for (int i = 0; i < value.length; i++) out.value(value[i]);
43+
out.endArray();
44+
45+
}
46+
}
3147

3248
static void onReceiveTelephonyCellInfo(TermuxApiReceiver apiReceiver, final Context context, final Intent intent) {
3349
ResultReturner.returnData(apiReceiver, intent, new ResultReturner.ResultJsonWriter() {
@@ -76,6 +92,40 @@ public void writeJson(JsonWriter out) throws Exception {
7692
writeIfKnown(out, "tac", lteInfo.getCellIdentity().getTac());
7793
writeIfKnown(out, "mcc", lteInfo.getCellIdentity().getMcc());
7894
writeIfKnown(out, "mnc", lteInfo.getCellIdentity().getMnc());
95+
96+
writeIfKnown(out, "rsrp", lteInfo.getCellSignalStrength().getRsrp());
97+
writeIfKnown(out, "rsrq", lteInfo.getCellSignalStrength().getRsrq());
98+
writeIfKnown(out, "rssi", lteInfo.getCellSignalStrength().getRssi());
99+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
100+
writeIfKnown(out, "bands", lteInfo.getCellIdentity().getBands());
101+
}
102+
} else if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) && (cellInfo instanceof CellInfoNr)) {
103+
CellInfoNr nrInfo = (CellInfoNr) cellInfo;
104+
CellIdentityNr nrcellIdent = (CellIdentityNr) nrInfo.getCellIdentity();
105+
CellSignalStrength ssInfo = nrInfo.getCellSignalStrength();
106+
out.name("type").value("nr");
107+
out.name("registered").value(cellInfo.isRegistered());
108+
109+
out.name("asu").value(ssInfo.getAsuLevel());
110+
out.name("dbm").value(ssInfo.getDbm());
111+
writeIfKnown(out, "level", ssInfo.getLevel());
112+
writeIfKnown(out, "nci", nrcellIdent.getNci());
113+
writeIfKnown(out, "pci", nrcellIdent.getPci());
114+
writeIfKnown(out, "tac", nrcellIdent.getTac());
115+
out.name("mcc").value(nrcellIdent.getMccString());
116+
out.name("mnc").value(nrcellIdent.getMncString());
117+
if (ssInfo instanceof CellSignalStrengthNr) {
118+
CellSignalStrengthNr nrssInfo = (CellSignalStrengthNr) ssInfo;
119+
writeIfKnown(out, "csi_rsrp", nrssInfo.getCsiRsrp());
120+
writeIfKnown(out, "csi_rsrq", nrssInfo.getCsiRsrq());
121+
writeIfKnown(out, "csi_sinr", nrssInfo.getCsiSinr());
122+
writeIfKnown(out, "ss_rsrp", nrssInfo.getSsRsrp());
123+
writeIfKnown(out, "ss_rsrq", nrssInfo.getSsRsrq());
124+
writeIfKnown(out, "ss_sinr", nrssInfo.getSsSinr());
125+
}
126+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
127+
writeIfKnown(out, "bands", nrcellIdent.getBands());
128+
}
79129
} else if (cellInfo instanceof CellInfoCdma) {
80130
CellInfoCdma cdmaInfo = (CellInfoCdma) cellInfo;
81131
out.name("type").value("cdma");
@@ -269,6 +319,10 @@ public void writeJson(JsonWriter out) throws Exception {
269319
networkTypeName = "unknown";
270320
break;
271321
default:
322+
if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) && (networkType == TelephonyManager.NETWORK_TYPE_NR)) {
323+
networkTypeName = "nr";
324+
break;
325+
}
272326
networkTypeName = Integer.toString(networkType);
273327
break;
274328
}

0 commit comments

Comments
 (0)