フォアグラウンド サービスとしてバックグラウンドで実行されるアプリを作成しています。このサービスは、PhoneStateListener のサブクラスをインスタンス化します。PhoneStateListener は、フォアグラウンド サービスのコンテキスト オブジェクトを使用して TelephonyService を作成し、セル位置の変更をリッスンします。これは、ディスプレイがオンのときに完全に機能します。しかし、表示が消えるとすぐに、セルのログは機能しなくなります。
public class gps_service extends Service
{
public static TelephonyManager p_TelephonyManager = null;
public static myPhoneStateListener p_myPhoneStateListener = null;
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
p_myPhoneStateListener = new myPhoneStateListener();
p_TelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
p_TelephonyManager.listen(p_myPhoneStateListener, PhoneStateListener.LISTEN_CELL_LOCATION);
...
}
public class myPhoneStateListener extends PhoneStateListener
{
public static int CurrentCellID;
/*
public static int current_cell_id;
@Override
public void onCellLocationChanged(CellLocation p_CellLocation)
{
//write to log
}
}
<uses-sdk android:minSdkVersion="3" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
電話画面がオンの場合、すべて正常に動作しますが、onCellLocationChanged イベントの画面をオンにすると、呼び出しが発生しません。また 、 GsmCellLocation currentCellLocation = (GsmCellLocation) p_TelephonyManager .getCellLocation();を試します。 このコードでは、実際のセル ID ではなく、画面外の前に常に最後のセル ID を返します。
また、サービスで partial_wake_lock を試してみましたが、同じ結果になりました:
private PowerManager pPowerManager = null;
private PowerManager.WakeLock pWakeLock = null;
..
@Override
public void onCreate()
{
super.onCreate();
pPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
pWakeLock = pPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "No sleep");
pWakeLock.acquire();
...
}
@Override
public void onDestroy()
{
if (pWakeLock != null)
{
pWakeLock.release();
pWakeLock = null;
}
...
}
私が間違っていることは何ですか?HTC Desire Z Android 2.2 でのテスト