Вопрос по alarmmanager, android – AlarmManager не работает

16

Мне нужно начать деятельность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();
вы пробовали @Pratik D ответить? Raghu Rami Reddy

Ваш Ответ

5   ответов
31
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()

@JamesCameron Ты спас моего ночного приятеля ..
Ой, извини. На самом деле это ничего не изменило. Я просто не ждал, пока API выполнит свои вызовы или что-то в этом роде. Кажется, пройдет около 10-30 секунд, прежде чем мое уведомление появится в панели уведомлений (я использовал AlarmManager, чтобы облегчить это).
Часть в «приемнике»; элемент, который идет в манифесте, где он говорит «android: process =»: remote » это то, что заставило мои проблемы уйти. У меня уже был & lt; приемник & gt; элемент, а также «android: name»; внутри него, но, похоже, он нуждался в «android: process =»: remote ». чтобы получить это сверху.
Исправление: Часть получателя должна быть внутри тега приложения!
@Alex @ dinesh707 ГдеSetAlarm() называется?
6

На данный момент невозможно запустить Alarm без запуска приложения, вы должны один раз запустить соответствующее приложение, чтобы активировать ваш Alarm. За это....!!

In Your 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);

In Your 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);
0

Пока ваше приложение запускается один раз, чтобы установитьAlarmManagerсигнал тревоги активирует ваши намерения, даже если ваше приложение не запущено. Исключение - после перезагрузки устройства. квключить тревогу при перезагрузке устройствавнедритьBroadcastReceiver установить будильник и добавить получателя в манифест дляACTION_BOOT_COMPLETED:

<receiver android:name=".SampleBootReceiver"
        android:enabled="false">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"></action>
    </intent-filter>
</receiver>
3

И если это все еще не работает, избавиться отandroid:process=":remote" часть может помочь. Работал для меня :)

-1

Кроме того, в дополнение к вышесказанному, я думаю, что методы в AlarmActivity должны быть в методе oncreate действия LAUNCHER. В этом случае активность Activation Alarm должна быть активностью LAUNCHER приложения. это решило мою проблему

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