Целый день искал, но нифига не нашел( то что нашел помогло тоолько частично).
Суть вот в чем, у меня есть 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 (хотя я пробовал и оно мне не работало :()?
Я не хочу сделать вечную службу, только чтобы после закрытия все работало, поскольку большинство людей так закрывают свои программы (сейчас не об этом), чтобы возможность закрытия (точнее остановки) из "запущены службы" так и оставалась.
Подскажите пожалуйста буду очень благодарен. По возможности ссылки на решения это проблемы, если я плохо искал, или лучше на моем примере что поправить и т.д.
Благодарю за понимание!!!