AlarmManager not working

2019-01-24 02:13发布

I need to start the activity AlarmReceiver after 10 seconds (for example). I need it to be activated without running the app. But whether the app runs or not the AlarmReceiver do not get called. Any suggestions?

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

5条回答
我只想做你的唯一
2楼-- · 2019-01-24 02:32

As of now, it's not possible to start Alarm without running the app, you must once run your respective app to activate your alarm.. For this....!!

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);
查看更多
我命由我不由天
3楼-- · 2019-01-24 02:37

So long as your app has run once to establish the alarm with AlarmManager, the alarm fires your intent even if your app isn't running. The exception is after a device restart. To start an alarm when the device restarts, implement a BroadcastReceiver to set the alarm, and add the receiver to your manifest for ACTION_BOOT_COMPLETED:

<receiver android:name=".SampleBootReceiver"
        android:enabled="false">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"></action>
    </intent-filter>
</receiver>
查看更多
放我归山
4楼-- · 2019-01-24 02:41

And if it is still not working getting rid of the android:process=":remote" part may help. Worked for me :)

查看更多
做个烂人
5楼-- · 2019-01-24 02:41

Also, In addition to the above,I think the methods in the AlarmActivity should be in the oncreate method of the LAUNCHER activity.. In this case, the Alarm Activvity should be the LAUNCHER activity of the app. this solved my problem

查看更多
一夜七次
6楼-- · 2019-01-24 02:42
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);
    }
}

This is the final code i managed to get working. You need to add

 <receiver  android:process=":remote" android:name="AlarmReceiver"></receiver>

just above the </application> tag in Manifest file.

This will set an alarm to trigger in 30 seconds after calling the method SetAlarm()

查看更多
登录 后发表回答