AlarmManager не работает, когда экран заблокирован на Android v4

Я не могу заставить AlarmManager работать, когда экран заблокирован. Приложение отлично работает на моем Sony Ericsson Xperia Active с Android 2.3.4, независимо от того, заблокирован экран или нет. Я всегда вижу отладочное сообщение onReceive() в LogCat. Но когда я пытаюсь запустить приложение на более новых устройствах с более новыми версиями Android, например, Samsung Galaxy Xcover2 с Android 4.1.2, приложение работает только до тех пор, пока включен экран. Я вижу отладочное сообщение в LogCat для onReceive() только до тех пор, пока экран включен. Я не вижу сообщений об отладке, когда экран заблокирован и приложение перестает работать. Я пробовал другие устройства с той же проблемой. Общий знаменатель, кажется, (?) Android-версия.

Манифест

....

<service
android:name=".MyGPSService"
android:enabled="true"
android:exported="false" >
</service>

<receiver android:name=".MyAMReceiver" />

</application>

</manifest>

Основная деятельность

....

public void onResume()  {
super.onResume();
// PendingIntent Broadcast from AlarmManager
Intent intent = new Intent(this, MyAMReceiver.class);
PendingIntent pendingintent = PendingIntent.getBroadcast(this, 112358, intent, PendingIntent.FLAG_CANCEL_CURRENT);

// Registering pending intent with AlarmManager
AlarmManager alarmmanager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmmanager.cancel(pendingintent); // Cancel any existing alarms
alarmmanager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+10000,60000, pendingintent); // Delay first trigger 10s, timer interval 60s

Класс приемника

....

public class MyAMReceiver extends BroadcastReceiver {
public MyAMReceiver() {
}


@Override
public void onReceive(Context context, Intent intent) {

//DEBUG!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Log.d("MyAMReceiver", "onReceive()");

// Wake CPU from sleep if unit screen is locked
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
wl.acquire();

// Start service
Intent intentS = new Intent(context, MyGPSService.class);
context.startService(intentS);

}
}

person mrelemji    schedule 08.08.2013    source источник
comment
Думал, что нашел решение здесь, но нет. Samsung 4.1 по-прежнему отказывается запускать AlarmManager(?). stackoverflow.com/ вопросы/5938213/   -  person mrelemji    schedule 09.08.2013


Ответы (1)


Изменил мой код на это после прочтения выше:

alarmmanager.setRepeating(AlarmManager.ELAPSE_REALTIME_WAKEUP,SystemClock.elapsedRealtime()+10000,60000, pendingintent);

Samsung Android 4.1 по-прежнему отказывается запускать AlarmManager(?) в спящем режиме. Тем не менее, все еще работает на Sony Android 2.3.

Но, согласно документации Android на SystemClock, это не должно иметь никакого значения: «AlarmManager может запускать однократные или повторяющиеся события, которые происходят, даже когда устройство находится в глубоком сне или ваше приложение не запущено. События могут быть запланированы по вашему выбору. из currentTimeMillis() (RTC) или elapsedRealtime() (ELAPSED_REALTIME) и вызывают широковещательную рассылку Intent, когда они происходят».

http://developer.android.com/reference/android/os/SystemClock.html

person mrelemji    schedule 09.08.2013
comment
Так может это не я тупой, а люди в Самсунге? Может ли быть такая же проблема с моим Xcover2? netzpurist .de/2010/11/ - person mrelemji; 09.08.2013