AlarmManager не работает
Мне нужно запустить активность AlarmReceiver
через 10 секунд (например). Мне нужно, чтобы он был активирован без запуска приложения. Но не запускается ли приложение или нет AlarmReceiver
. Любые предложения?
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 111, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
//alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
//+ (10 * 1000), pendingIntent);
Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();
Ответы
Ответ 1
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String message = "Hellooo, alrm worked ----";
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
Intent intent2 = new Intent(context, TripNotification.class);
intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent2);
}
public void setAlarm(Context context){
Log.d("Carbon","Alrm SET !!");
// get a Calendar object with current time
Calendar cal = Calendar.getInstance();
// add 30 seconds to the calendar object
cal.add(Calendar.SECOND, 30);
Intent intent = new Intent(context, AlarmReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Get the AlarmManager service
AlarmManager am = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
}
}
Это последний код, который мне удалось получить. Вам нужно добавить
<receiver android:process=":remote" android:name="AlarmReceiver"></receiver>
чуть выше тега </application>
в файле манифеста.
Это приведет к срабатыванию будильника через 30 секунд после вызова метода SetAlarm()
Ответ 2
На данный момент невозможно запустить Alarm без запуска приложения, вы должны сразу запустить соответствующее приложение, чтобы активировать ваш будильник.
Для этого....!!
В вашей ALARM_ACTIVITY:
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(ALARM_ACTIVITY.this,ALARM_RECEIVER.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(SetReminder.this, ID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeInMillis() + 1000, pendingIntent);
В вашем ALARM_RECEIVER:
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
notification = new Notification(R.drawable.alarmicon, "charSequence", System.currentTimeMillis());
notification.setLatestEventInfo(context, "alarmTitle", "charSequence", pendingIntent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(1, notification);
Ответ 3
И если он все еще не работает, то может избавиться от части android:process=":remote"
. Работал для меня:)
Ответ 4
Кроме того, в дополнение к вышесказанному, я думаю, что методы в AlarmActivity должны быть в методе oncreate активности LAUNCHER. В этом случае Alarm Activvity должна быть активностью LAUNCHER приложения. это решило мою проблему