これは意図を待ちませんが、アクティビティのonCreateでは、電話サービスへの参照を取得し、表示するときだけgetCellLocation()を呼び出しません、私が持っているコードでこの質問から
mPhoneStateReceiver = new PhoneStateIntentReceiver(this, new ServiceStateHandler());
mPhoneStateReceiver.notifyServiceState(MY_NOTIFICATION_ID);
mPhoneStateReceiver.notifyPhoneCallState(MY_NOTIFICATION_ID);
mPhoneStateReceiver.notifySignalStrength(MY_NOTIFICATION_ID);
mPhoneStateReceiver.registerIntent();
private class ServiceStateHandler extends Handler {
public void handleMessage(Message msg) {
switch (msg.what) {
case MY_NOTIFICATION_ID:
ServiceState state = mPhoneStateReceiver.getServiceState();
System.out.println(state.getCid());
System.out.println(state.getLac());
System.out.println(mPhoneStateReceiver.getSignalStrength());
break;
}
}
}
必要な場合に。
私はまた、我々はTelephonyManagerに
listen
を呼び出して、目的のフィールドを指定する必要があることを参照もののPhoneStateServiceインテントをリッスン
m_manager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
GsmCellLocation loc = (GsmCellLocation)m_manager.getCellLocation();
if (loc != null)
{
out.format("Location ");
if (loc.getCid() == -1) {
out.format("cid: unknown ");
} else {
out.format("cid: %08x ", loc.getCid());
}
if (loc.getLac() == -1) {
out.format("lac: unknown\n");
} else {
out.format("lac: %08x\n", loc.getLac());
}
}
。だった私の場合:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "service start");
m_manager.listen(m_listener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS | PhoneStateListener.LISTEN_SERVICE_STATE | PhoneStateListener.LISTEN_CALL_STATE);
return super.onStartCommand(intent, flags, startId);
}
おそらく、リストにLISTEN_CELL_LOCATION
を追加する必要があります。
注:ACCEP_COARSE_LOCATION権限をアプリケーションマニフェストに追加しましたか? PhoneStateListenerのドキュメントに記載されているように、情報の許可がない場合は、いくつかのフィールドが空になります。
このリンクをチェックアウトhttp://stackoverflow.com/a/3145655/28557、それは現在の場所を取得する方法をうまく説明しました –
[セルタワーの場所を取得する - Android]の可能な複製(http://stackoverflow.com/questions/6668271/get-cell-tower-locations-android) –