2012-03-21 8 views
3

セルIDとLAC情報を要求すると、デバイスによっては取得できません。Android:CellIDはすべての携帯通信会社で利用できませんか?

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

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

cellID = location.getCid(); 

lac = location.getLac(); 
  1. いくつかのGSMキャリアがそれらを提供していない理由を誰もが知っていますか?
  2. 権限が必要ですか?
  3. CellIDとLACを取得する方法について他に何がありますか?

答えて

-2

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

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

    new_cid = cellLocation.getCid() % 0xffff; 
    new_lac = cellLocation.getLac() % 0xffff; 
+2

これは間違っています。 @ nkoutの答えは正解です。 –

0

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

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()、リスナーに、登録:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
+0

CDMAのソリューションとは何ですか?ユーザーの位置情報サービス(設定)がオフのときに機能しますか? –

+0

@guidomocha、ソリューションは似ていますが、CDMAシステムにはLAC、CIDは含まれていません。代わりにネットワークIDとシステムIDがあります。 http://developer.android.com/reference/android/telephony/cdma/CdmaCellLocation.html – Eduardo

17

documentation上に述べたように
telephonyManager = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE); 
telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CELL_LOCATION); 

、LISTEN_CELL_LOCATIONには、次の権限を追加する必要があります

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

WRONG

new_cid = cellLocation.getCid() % 0xffff; 

RIGHT

new_cid = cellLocation.getCid() & 0xffff; 
+1

Correct Indeedのドキュメントを確認してください。これは答えとしてマークする必要があります。 – CodeWarrior

+0

他の言い方をすれば、cellLocation.getCid()%65536も動作するはずです。 –

0

あなたがたManifest.xmlファイルに

012をfollowinを追加する必要があります許可について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(); 

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

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
+0

CDMAのソリューションとは何ですか?ユーザーの位置情報サービス(設定)がオフのときに機能しますか? –

関連する問題