Я пишу приложение, которое работает в фоновом режиме в качестве службы переднего плана.Этот сервис создает экземпляр подкласса 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 (); по этому коду всегда возвращать идентификатор последней ячейки перед выключенным экраном, а не фактический идентификатор ячейки.
Также я пытаюсь частично в моемсервис, но результат тот же:
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