У меня есть требование, когда мне нужно показывать уведомление пользователю в определенное время в течение недели.
Я попытался использовать диспетчер аварийных сигналов для достижения этой цели.
Проблема, с которой я столкнулся, заключается в том, что метод onRecieve() моего широковещательного прослушивателя работает нормально, когда приложение находится в памяти, но если я уничтожу приложение (примечание: не принудительно останавливаю, я только удаляю приложение из памяти), onRecieve метод не вызывается.
Из логарифма я вижу, что alarmManager отправляет правильное намерение, но мое приложение по какой-то причине не запускается.
Я просмотрел все возможные ресурсы по этому поводу, и ни один из них, похоже, не решил мою проблему.
Мой манифест:
Разрешения:
<uses-permission android:name="android.permission.WAKE_LOCK">
</uses-permission>
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
Получатель намерения в манифесте:
<receiver android:name=".Alarm">
<intent-filter>
<action android:name="android.intent.action.NOTIFY" />
<action android:name="com.myApp.myCustomThing" />
</intent-filter>
</receiver>
Мой широковещательный приемник:
public class Alarm extends BroadcastReceiver
{
Context context;
@Override
public void onReceive(Context context, Intent intent)
{
Log.i("Info","Inside OnReceive");
this.context = context;
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
wl.acquire();
Log.i("Info","Alarm called - showing toast");
// Put here YOUR code.
Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example
Log.i("Info","Trying to create notification");
wl.release();
}
public void setAlarm(Context context)
{
Log.i("Info","In Set Alarm");
AlarmManager am =( AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, Alarm.class);
i.setAction("com.myApp.myCustomThing");
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
// am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 1, pi); // Millisec * Second * Minute
am.set(AlarmManager.RTC_WAKEUP,1000*60,pi);
Log.i("Info","Alarm Set");
}
}
Я вижу следующую запись в logcat, сообщение журнала появляется независимо от того, находится ли приложение в памяти или нет.
01-15 14:08:06.967 1396-1673/? V/AlarmManager: Triggering alarm #0: 2
when =60399531 package =notification.me.com.myApp operation
=*walarm*:com.myApp.myCustomThing flags =0x5
setAlarm()
? - person azizbekian   schedule 15.01.2018