3

セル ID と LAC 情報を要求すると、一部のデバイスでそれらを取得できません。

私はこのコードを使用します:

TelephonyManager tm =(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
location = (GsmCellLocation) tm.getCellLocation();

cellID = location.getCid();

lac = location.getLac();
  1. 一部の GSM キャリアが提供しない理由を知っている人はいますか?
  2. そのための許可が必要ですか?
  3. CellID と LAC の取得について他に知っておくべきことはありますか?
4

5 に答える 5

19

CellIdを見つけるには、modではなく0xffffをビットマスクとして使用する必要があります。

間違い

new_cid = cellLocation.getCid() % 0xffff;

new_cid = cellLocation.getCid() & 0xffff;
于 2012-10-19T07:45:24.597 に答える
2

次のように PhoneStateListener を使用してみてください。

まず、リスナーを作成します。

public PhoneStateListener phoneStateListener = new PhoneStateListener() {
    @Override
    public void onCellLocationChanged (CellLocation location) {
        StringBuffer str = new StringBuffer();
        // GSM
        if (location instanceof GsmCellLocation) {
            GsmCellLocation loc = (GsmCellLocation) location;
            str.append("gsm ");
            str.append(loc.getCid());
            str.append(" ");
            str.append(loc.getLac());
            Log.d(TAG, str.toString());
            }
    }
};

次に、onCreate() でリスナーを次のように登録します。

telephonyManager = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CELL_LOCATION);

ドキュメントに記載されているように、LISTEN_CELL_LOCATION には次の権限を追加する必要があります。

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
于 2012-04-02T14:44:07.427 に答える
0

これは、特定の情報にアクセスできないようにするために、製造元がデバイスに基になるカーネル コードを実装した方法によるものだと思います。

于 2012-03-21T16:07:20.907 に答える
0

TelephonyManager を使用する必要があります

TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    GsmCellLocation cellLocation = (GsmCellLocation) telephonyManager
            .getCellLocation();

    // Cell Id, LAC
    int cellid = cellLocation.getCid();
    int lac = cellLocation.getLac();

    // MCC
    String MCC = telephonyManager.getNetworkOperator();
    int mcc = Integer.parseInt(MCC.substring(0, 3));

    // Operator name
    String operatoprName = telephonyManager.getNetworkOperatorName();

許可を得るには、Manifest.xml ファイルに followin を追加する必要があります

 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
于 2014-01-31T11:48:26.577 に答える
-2

したがって、次のようなものを試すことができます。GSM のセル ID とロケーション エリア コー​​ドを取得しました。しかし、UMTS の場合、getCid () は exple 33 166 248 に対して大きな数値を返します。そのため、モジュロ演算子 (exple xXx.getCid() % 0xffff) を追加します。

GsmCellLocation cellLocation = (GsmCellLocation)telm.getCellLocation();

    new_cid = cellLocation.getCid() % 0xffff;
    new_lac = cellLocation.getLac() % 0xffff;
于 2012-03-30T14:45:45.003 に答える