Android: How to use AlarmManager

前端 未结 6 1003
时光取名叫无心
时光取名叫无心 2020-11-22 06:40

I need to trigger a block of code after 20 minutes from the AlarmManager being set.

Can someone show me sample code on how to use an AlarmManager<

6条回答
  •  清酒与你
    2020-11-22 07:13

    There are some good examples in the android sample code

    .\android-sdk\samples\android-10\ApiDemos\src\com\example\android\apis\app

    The ones to check out are:

    • AlarmController.java
    • OneShotAlarm.java

    First of, you need a receiver, something that can listen to your alarm when it is triggered. Add the following to your AndroidManifest.xml file

    
    

    Then, create the following class

    public class MyAlarmReceiver extends BroadcastReceiver { 
         @Override
         public void onReceive(Context context, Intent intent) {
             Toast.makeText(context, "Alarm went off", Toast.LENGTH_SHORT).show();
         }
    }
    

    Then, to trigger an alarm, use the following (for instance in your main activity):

    AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, MyAlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
    Calendar time = Calendar.getInstance();
    time.setTimeInMillis(System.currentTimeMillis());
    time.add(Calendar.SECOND, 30);
    alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);
    

    .


    Or, better yet, make a class that handles it all and use it like this

    Bundle bundle = new Bundle();
    // add extras here..
    MyAlarm alarm = new MyAlarm(this, bundle, 30);
    

    this way, you have it all in one place (don't forget to edit the AndroidManifest.xml)

    public class MyAlarm extends BroadcastReceiver {
        private final String REMINDER_BUNDLE = "MyReminderBundle"; 
    
        // this constructor is called by the alarm manager.
        public MyAlarm(){ }
    
        // you can use this constructor to create the alarm. 
        //  Just pass in the main activity as the context, 
        //  any extras you'd like to get later when triggered 
        //  and the timeout
         public MyAlarm(Context context, Bundle extras, int timeoutInSeconds){
             AlarmManager alarmMgr = 
                 (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
             Intent intent = new Intent(context, MyAlarm.class);
             intent.putExtra(REMINDER_BUNDLE, extras);
             PendingIntent pendingIntent =
                 PendingIntent.getBroadcast(context, 0, intent, 
                 PendingIntent.FLAG_UPDATE_CURRENT);
             Calendar time = Calendar.getInstance();
             time.setTimeInMillis(System.currentTimeMillis());
             time.add(Calendar.SECOND, timeoutInSeconds);
             alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(),
                          pendingIntent);
         }
    
          @Override
         public void onReceive(Context context, Intent intent) {
             // here you can get the extras you passed in when creating the alarm
             //intent.getBundleExtra(REMINDER_BUNDLE));
    
             Toast.makeText(context, "Alarm went off", Toast.LENGTH_SHORT).show();
         }
    }
    

提交回复
热议问题