@Nick2015

AlarmManager и Service or Receiver?

Целый день искал, но нифига не нашел( то что нашел помогло тоолько частично).
Суть вот в чем, у меня есть AlarmManeger как уже всем и так ясно, он работает прекрасно без преувеличения, реализован с помощю BroadcastReceiver. Вот собствено сам код:
public class AlarmManagerBroadcastReceiver extends BroadcastReceiver {
    public static String ONE_TIME = "onetime";
    public static final String NOTIFICATION_TITLE = "notification_title";
    public static final String NOTIFICATION_DETAILS = "notification_details";
    public static final String NOTIFICATION_REQUEST = "notification_request_code";


    @Override
	public void onReceive(Context context, Intent intent) {
            PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "com.something.alarm");
            //Acquire the lock
            wl.acquire();
            //You can do the processing here update the widget/remote views.
            Bundle extras = intent.getExtras();
            StringBuilder msgStr = new StringBuilder();
            String title = extras.getString(NOTIFICATION_TITLE);
            String details = extras.getString(NOTIFICATION_DETAILS);
            int reqCode = extras.getInt(NOTIFICATION_REQUEST);
            msgStr.append("One time Timer : ");
            Utils.generateNotification(context, title, details, reqCode);
            Format formatter = new SimpleDateFormat("hh:mm:ss a");
            msgStr.append(formatter.format(new Date()));

            Toast.makeText(context, msgStr, Toast.LENGTH_LONG).show();

            //Release the lock
            wl.release();
    }


    public void CancelAlarm(Context context, int requestCode)
    {
        Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
        PendingIntent sender = PendingIntent.getBroadcast(context, requestCode, intent, 0);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.cancel(sender);
    }
    public void setOnetimeTimer(Context context, Calendar d, String title, String details, int requestCode){
        AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
        intent.putExtra(ONE_TIME, Boolean.TRUE);
        intent.putExtra(NOTIFICATION_TITLE, title);
        intent.putExtra(NOTIFICATION_DETAILS, details);
        intent.putExtra(NOTIFICATION_REQUEST, requestCode);
        Log.i("setOnetimeTimer",  "  "+requestCode);

        PendingIntent pi = PendingIntent.getBroadcast(context, requestCode, intent, 0);

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.YEAR, d.get(Calendar.YEAR));
        calendar.set(Calendar.MONTH, d.get(Calendar.MONTH));
        calendar.set(Calendar.DAY_OF_MONTH, d.get(Calendar.DAY_OF_MONTH));
        calendar.set(Calendar.HOUR_OF_DAY, d.get(Calendar.HOUR_OF_DAY));
        calendar.set(Calendar.MINUTE, d.get(Calendar.MINUTE));
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.AM_PM, d.get(Calendar.AM_PM));
        am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);
    }
}

Как уже говорил все работает, так как надо, выводит сообщение в нужное время, то когда я завершают процесс через деспетчер задач то сообщения больше не показываются. Я отлично знаю, что это работает таким образом, как сделать так чтобы после закрытия он продолжал свою работу? Не лучше ли будет использовать Сервис с START_STICKY (хотя я пробовал и оно мне не работало :()?
Я не хочу сделать вечную службу, только чтобы после закрытия все работало, поскольку большинство людей так закрывают свои программы (сейчас не об этом), чтобы возможность закрытия (точнее остановки) из "запущены службы" так и оставалась.
Подскажите пожалуйста буду очень благодарен. По возможности ссылки на решения это проблемы, если я плохо искал, или лучше на моем примере что поправить и т.д.
Благодарю за понимание!!!
  • Вопрос задан
  • 806 просмотров
Пригласить эксперта
Ответы на вопрос 1
saintbyte
@saintbyte
Django developer
А androidManifest.xml пробывал прописывать BroadcastReceiver ?

developer.android.com/intl/ru/guide/topics/manifes...
habrahabr.ru/post/149875
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы