1

私は場所、つまり経度と緯度をGSMCellLocationこの理由で取得する必要がある状況にあり、次の方法を試しています。

  ...
  TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
  location = (GsmCellLocation) tm.getCellLocation();
  cid = location.getCid();
  lac = location.getLac();
  ...

しかし、アプリケーションがクラッシュして私に与えますNPE。ログとデバッグで確認しましたが、それがgetCellLocation返されるため、 とnullを取得できません。Google Docs からのこのメソッドの署名は、次のように述べています。cidlac

Returns the current location of the device. Return null if current location is not available. 

今私の質問は、このメソッドを使用する前に現在の Location を取得して、null にならないようにする方法です。私の状況では、これを代わりに使用して場所を取得しようGPSとしているためです。Network更新してください。どんな助けでも大歓迎です。

4

4 に答える 4

2

この権限を追加します:ACCESS_COARSE_LOCATIONまたはACCESS_FINE_LOCATIONmanifest.xml

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
于 2013-01-29T07:59:38.143 に答える
2

TelephonyManagerから、LTE に関連している可能性があります。

デバイスに無線が 1 つしかなく、その無線に LTE 接続がある場合、このメソッドは null を返します...

于 2015-04-30T21:05:39.210 に答える
1

現在の場所が利用できない場合、getCellLocation() は null を返します。

テレフォニマネージャー

さらに、電話機の設定に Basebandtype 情報が存在することを確認してください。

次のコードは私と一緒にうまく機能していますあなたはそれをテストすることができます

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

      int cid = cellLocation.getCid();
      int lac = cellLocation.getLac();
      textGsmCellLocation.setText(cellLocation.toString());
      textCID.setText("gsm cell id: " + String.valueOf(cid));
      textLAC.setText("gsm location area code: " + String.valueOf(lac));
于 2013-01-29T07:51:34.530 に答える