Android基地局情報取得およびSimカード関連情報取得
6592 ワード
概要:
本編では主にAndroidが基地局情報を取得する方法を紹介するほか、SIMカード関連フィールドの取得もあり、まず略語の概念を紹介し、その後コードの書き方を更新する.
前言:前に1つの需要に出会って、SIMカードの関連する属性を取得する必要があります:IMSI号、SIMカードの番号、通話番号、SIMキャリアの国家コード、キャリア名、ネットワークキャリアなどのパラメータ、それから基地局情報:mcc#mnc#lac#cellid#rss.ネット上の方法でいくつかの穴を踏んだこともあるので、こちらは自分の実行可能な案を記録します.
基地局情報の略語概念:
LAC:Location Area Code、測位領域符号化、2バイト長の16進BCD符号(0000およびFFFEを除く)
TAC:Tracking Area Code,トレースエリアコード,
CID:Cell Identity、シンボルID、2バイト
MCC:Mobile Country Code,モバイル国コード,三桁数,中国:460
MNC:Mobile Network Code,モバイルネットワーク番号,2桁(中国移動0,中国聯通1,中国電信2)
BSSS:Base station signal strength,基地局信号強度
ネットワークの種類:
1)NETOWRK_TYPE_GPRS 1-移動連通2.5 G
2)NETOWRK_TYPE_EDGE 2-移動2.75 G
3)NETOWRK_TYPE_UMTS 3-聯通WCDMA 46006
UMTS定義は3 G携帯電話技術であり、WCDMAを下位標準として使用し、WCDMAはGSMネットワークに下向きに互換性がある.
4)NETOWRK_TYPE_CDMA 4-電気通信
5)NETOWRK_TYPE_1 xRTT 7-電気通信
6)NETOWRK_TYPE_EVD0_0、NETOWRK_TYPE_EVD0_A、NETOWRK_TYPE_EVD0_B
5-6-12-電気通信
7)NETOWRK_TYPE_HSDPA 8-聯通46006 3.5 G
8)NETOWRK_TYPE_LTE 13-モバイル、ユニコム、テレコム-4 Gの各キャリアが利用可能.
9)NETOWRK_TYPE_GSM 16
10)NETOWRK_TYPE_TD_SCDMA 17-3 G移動時に使用
キャリアコード460の先頭の整理:
46,000中国移動(GSM)
46001中国聯通(GSM)
46002中国移動(TD-S)
46003中国電信(CDMA)
46004空(テスト用らしい)
46005中国電信(CDMA)
46006中国聯通(WCDMA)
46007中国移動(TD-S)
46008
46009
46010
46011中国電信(FDD-LTE)
LTE CDMA GSM WCDMA
携帯電話のネットの設置の中に優先的なネットがあって、中には中国移動の4600400241004があって、どういう意味で、どんな機能がありますか?
答え:460004600241004は、モバイルネットワークのID番号(PLMN ID)であり、サポートされているアクセス技術はそれぞれ:
46000は中国移動GSMネットワークの識別番号(PLMN識別)であり、サポートされるアクセス技術はGSM/TD-SCDMAである.
46001は中国聯通GSMネットワークの識別番号(PLMN識別)であり、サポートされているアクセス技術はGSMである.
46002は中国移動134/159のSIMカードのPLMN標識であり、サポートされているアクセス技術はGSM/TD-SCDMAである.
46007は中国移動TD-SCDMA網のPLMN識別であり、サポートされるアクセス技術はTD-SCDMAである.
41004は中国移動香港のPLMN標識
説明:
IMSIは3つの部分から構成されています.
移動国番号MCC:3つの数字からなる、移動ユーザが属する国を一意に識別する.中国は460.
移動網番号MNC:移動ユーザが属する移動網を識別する.
移動ユーザ識別コードMSIN:国内デジタルセルラー移動通信網における移動ユーザを一意に識別する.
SIMカード情報(例はテレコムカード情報):
(ええと...基地局情報のログが取れなくて、気まずいので、今度補充します)
まず、簡単なSIMカードのプロパティフィールドの取得方法をいくつか紹介します.
IMSI、SimSerialNumber、Line1Number、NetworkCountryIso、SimOperatorName、NetworkOperatorName、NetworkCountryIso
まずシステムサービスを受け取り、Context.に取ります.TELEPHONY_SERVICE、telephonyManagerで関連属性を取得します.
このセクションでは、基地局情報の取得について説明します.
すべての基地局情報リストを取得し、巡回した後、info instanceof CellInfoCdmaのようなインスタンスをそれぞれ判断し、基地局情報単位の各属性をそれぞれ取得する.コードは難しくありませんが、見ただけでどうやって遊ぶか知っていればOKです.
コードは難しくありませんが、以前はネット上の方法があまり使いにくいので、方法が古くなったのか、何が原因なのか分かりませんでした.しかし、あれこれ話して、この方法が一番よくて、全面的です.
本編では主にAndroidが基地局情報を取得する方法を紹介するほか、SIMカード関連フィールドの取得もあり、まず略語の概念を紹介し、その後コードの書き方を更新する.
前言:前に1つの需要に出会って、SIMカードの関連する属性を取得する必要があります:IMSI号、SIMカードの番号、通話番号、SIMキャリアの国家コード、キャリア名、ネットワークキャリアなどのパラメータ、それから基地局情報:mcc#mnc#lac#cellid#rss.ネット上の方法でいくつかの穴を踏んだこともあるので、こちらは自分の実行可能な案を記録します.
基地局情報の略語概念:
LAC:Location Area Code、測位領域符号化、2バイト長の16進BCD符号(0000およびFFFEを除く)
TAC:Tracking Area Code,トレースエリアコード,
CID:Cell Identity、シンボルID、2バイト
MCC:Mobile Country Code,モバイル国コード,三桁数,中国:460
MNC:Mobile Network Code,モバイルネットワーク番号,2桁(中国移動0,中国聯通1,中国電信2)
BSSS:Base station signal strength,基地局信号強度
ネットワークの種類:
1)NETOWRK_TYPE_GPRS 1-移動連通2.5 G
2)NETOWRK_TYPE_EDGE 2-移動2.75 G
3)NETOWRK_TYPE_UMTS 3-聯通WCDMA 46006
UMTS定義は3 G携帯電話技術であり、WCDMAを下位標準として使用し、WCDMAはGSMネットワークに下向きに互換性がある.
4)NETOWRK_TYPE_CDMA 4-電気通信
5)NETOWRK_TYPE_1 xRTT 7-電気通信
6)NETOWRK_TYPE_EVD0_0、NETOWRK_TYPE_EVD0_A、NETOWRK_TYPE_EVD0_B
5-6-12-電気通信
7)NETOWRK_TYPE_HSDPA 8-聯通46006 3.5 G
8)NETOWRK_TYPE_LTE 13-モバイル、ユニコム、テレコム-4 Gの各キャリアが利用可能.
9)NETOWRK_TYPE_GSM 16
10)NETOWRK_TYPE_TD_SCDMA 17-3 G移動時に使用
キャリアコード460の先頭の整理:
46,000中国移動(GSM)
46001中国聯通(GSM)
46002中国移動(TD-S)
46003中国電信(CDMA)
46004空(テスト用らしい)
46005中国電信(CDMA)
46006中国聯通(WCDMA)
46007中国移動(TD-S)
46008
46009
46010
46011中国電信(FDD-LTE)
LTE CDMA GSM WCDMA
携帯電話のネットの設置の中に優先的なネットがあって、中には中国移動の4600400241004があって、どういう意味で、どんな機能がありますか?
答え:460004600241004は、モバイルネットワークのID番号(PLMN ID)であり、サポートされているアクセス技術はそれぞれ:
46000は中国移動GSMネットワークの識別番号(PLMN識別)であり、サポートされるアクセス技術はGSM/TD-SCDMAである.
46001は中国聯通GSMネットワークの識別番号(PLMN識別)であり、サポートされているアクセス技術はGSMである.
46002は中国移動134/159のSIMカードのPLMN標識であり、サポートされているアクセス技術はGSM/TD-SCDMAである.
46007は中国移動TD-SCDMA網のPLMN識別であり、サポートされるアクセス技術はTD-SCDMAである.
41004は中国移動香港のPLMN標識
説明:
IMSIは3つの部分から構成されています.
移動国番号MCC:3つの数字からなる、移動ユーザが属する国を一意に識別する.中国は460.
移動網番号MNC:移動ユーザが属する移動網を識別する.
移動ユーザ識別コードMSIN:国内デジタルセルラー移動通信網における移動ユーザを一意に識別する.
SIMカード情報(例はテレコムカード情報):
(ええと...基地局情報のログが取れなくて、気まずいので、今度補充します)
sim info[
simValue = -----,// ,
imsi = 460110421969346,
serialNumber = 89860315007690441866,
lineNumber = ,// SIM ,
countryIso = cn,
operatorName = ,
networkOperatorName = CHN-CT,
networkCountryIso = cn
まず、簡単なSIMカードのプロパティフィールドの取得方法をいくつか紹介します.
IMSI、SimSerialNumber、Line1Number、NetworkCountryIso、SimOperatorName、NetworkOperatorName、NetworkCountryIso
public static String getImsi(Context context, String imsi) {
String ret = null;
try {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
ret = telephonyManager.getSubscriberId();
} catch (Exception e) {
LoggerUtils.e("---------" + e.getMessage());
}
if (!TextUtils.isEmpty(ret)){
return ret;
} else {
return imsi;
}
}
まずシステムサービスを受け取り、Context.に取ります.TELEPHONY_SERVICE、telephonyManagerで関連属性を取得します.
このセクションでは、基地局情報の取得について説明します.
すべての基地局情報リストを取得し、巡回した後、info instanceof CellInfoCdmaのようなインスタンスをそれぞれ判断し、基地局情報単位の各属性をそれぞれ取得する.コードは難しくありませんが、見ただけでどうやって遊ぶか知っていればOKです.
//
public static List getTowerInfo(Context context) {
int mcc = -1;
int mnc = -1;
int lac = -1;
int cellId = -1;
int rssi = -1;
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String operator = tm.getNetworkOperator();
mcc = Integer.parseInt(operator.substring(0, 3));
List list = new ArrayList();
List infos = tm.getAllCellInfo();
for (CellInfo info : infos){
if (info instanceof CellInfoCdma){
CellInfoCdma cellInfoCdma = (CellInfoCdma) info;
CellIdentityCdma cellIdentityCdma = cellInfoCdma.getCellIdentity();
mnc = cellIdentityCdma.getSystemId();
lac = cellIdentityCdma.getNetworkId();
cellId = cellIdentityCdma.getBasestationId();
CellSignalStrengthCdma cellSignalStrengthCdma = cellInfoCdma.getCellSignalStrength();
rssi = cellSignalStrengthCdma.getCdmaDbm();
}else if (info instanceof CellInfoGsm){
CellInfoGsm cellInfoGsm = (CellInfoGsm) info;
CellIdentityGsm cellIdentityGsm = cellInfoGsm.getCellIdentity();
mnc = cellIdentityGsm.getMnc();
lac = cellIdentityGsm.getLac();
cellId = cellIdentityGsm.getCid();
CellSignalStrengthGsm cellSignalStrengthGsm = cellInfoGsm.getCellSignalStrength();
rssi = cellSignalStrengthGsm.getDbm();
}else if (info instanceof CellInfoLte){
CellInfoLte cellInfoLte = (CellInfoLte) info;
CellIdentityLte cellIdentityLte = cellInfoLte.getCellIdentity();
mnc = cellIdentityLte.getMnc();
lac = cellIdentityLte.getTac();
cellId = cellIdentityLte.getCi();
CellSignalStrengthLte cellSignalStrengthLte = cellInfoLte.getCellSignalStrength();
rssi = cellSignalStrengthLte.getDbm();
}else if (info instanceof CellInfoWcdma){
CellInfoWcdma cellInfoWcdma = (CellInfoWcdma) info;
CellIdentityWcdma cellIdentityWcdma = null;
CellSignalStrengthWcdma cellSignalStrengthWcdma = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
cellIdentityWcdma = cellInfoWcdma.getCellIdentity();
mnc = cellIdentityWcdma.getMnc();
lac = cellIdentityWcdma.getLac();
cellId = cellIdentityWcdma.getCid();
cellSignalStrengthWcdma = cellInfoWcdma.getCellSignalStrength();
rssi = cellSignalStrengthWcdma.getDbm();
}
}else {
LoggerUtils.e("get CellInfo error");
return null;
}
String tower = String.valueOf(mcc) + "#" + String.valueOf(mnc) + "#" + String.valueOf(lac)
+ "#" + String.valueOf(cellId) + "#" + String.valueOf(rssi);
list.add(tower);
}
if (list.size() > 6){
list = list.subList(0, 5);
}else if (list.size() < 3){
int need = 3 - list.size();
for (int i = 0; i < need; i++) {
list.add("");
}
}
return list;
}
コードは難しくありませんが、以前はネット上の方法があまり使いにくいので、方法が古くなったのか、何が原因なのか分かりませんでした.しかし、あれこれ話して、この方法が一番よくて、全面的です.