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 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;

}

コードは難しくありませんが、以前はネット上の方法があまり使いにくいので、方法が古くなったのか、何が原因なのか分かりませんでした.しかし、あれこれ話して、この方法が一番よくて、全面的です.