AlarmManager против пробуждения
Это мой код:
Деятельность:
@Override
public void onCreate(Bundle savedInstanceState) {
...
Intent intent = new Intent(this, MyReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
this.getApplicationContext(), 234324243, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
+ (5 * 1000), pendingIntent);
...
}
BroadcastReceiver:
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, StartNotificationService.class);
context.startService(service);
}
Обслуживание:
public class StartNotificationService extends Service {
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
this.intent = intent;
showNotification();
}
private void showNotification() {
Date date = new Date(pror.getFirstMillis());
Log.i("date", date.toString());
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
createNotification(contentTitle, contentText, tickerText);
pror.calculateVak();
pror.setFirstMillis(pror.getNextVak());
createStatusBarNotification(contentTitle, contentText, tickerText);
}
};
timer.schedule(timerTask, date);
}
}
AndroidManifest
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:icon="@drawable/icon"
android:label="@string/app_name" >
<activity android:name=".ShowSettingsActivity" />
<receiver android:name=".MyReceiver"/>
<service android:name=".service.StartNotificationService"/>
<activity android:name=".PreferencesActivity" android:label="@string/app_name">
</activity>
<activity
android:label="@string/app_name"
android:name=".VakActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Когда телефон переходит в режим сна, alarmManager не может запустить уведомление / обслуживание.
Если я оставлю свой телефон в состоянии "активная" разблокировка, уведомление будет активировано в определенное время.
Где я ошибся?
1 ответ
Решение
Есть два способа приблизиться к этому.
- Если все, что вы делаете - это создаете уведомление в строке состояния, просто сделайте это в своем
BroadcastReceiver
- Если вам нужно, чтобы ваша служба работала до отправки уведомления, и вам нужно, чтобы это происходило во время сна устройства, вам необходимо приобрести
WAKE_LOCK
Так что для подхода 2 в вашем классе тела для службы вам нужно:
PowerManager pm;
PowerManager.WakeLock wl;
Тогда в вашем onCreate
тебе нужно:
pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
wl.acquire();
И тогда в вашем onDestroy
вам нужно поставить:
wl.release();
Вся эта информация, которую я получил от PowerManager