Подтвердить что ты не робот

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();
4b9b3361

Ответ 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 приложения. это решило мою проблему