jean d'arme
jean d'arme

Reputation: 4353

How to start activity 5 minutes after exiting an app?

I'm looking for a solution on how to make sort of an alarm that after exiting an app it will start a new activity (or ten minutes if a user chooses to). It would be non-repeating, just one time.

I looked at TimerTask and Handlers, but they seem to be working only when an app is in the foreground. AlarmManager looks like it could do the job, but I don't know how to approach that. Any suggestions?

edit1: So here is what I have in MainActivity:

Intent intent = new Intent("wake_up");
    intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

    AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, 5000, pendingIntent);

This is BroadcasReceiver:

 @Override
public void onReceive(Context context, Intent intent) {
    Intent i = new Intent();
    i.setClassName("(packagename)", "(whole class name)");
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
}

And how I registered it in Manifest (like other activities):

<receiver
        android:name="FakeCallBroadcastReceiver" >
    </receiver>

I have put Toast in BroadcastReceiver and it works, but it appears immediately - changing time from 5000 to let's say 10000 doesn't change anything.

Upvotes: 0

Views: 440

Answers (2)

klimat
klimat

Reputation: 24991

Add this in onCreate() method in Application instance or main Activity:

Intent intent = new Intent("wake_up");
intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
PendingIntent pending = PendingIntent.getBroadcast(this, 0, intent, 0);

AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 5000, pendingIntent);

and start Activity in BroadcastReceiver:

public class AlarmReceiver extends BroadcastReceiver {

   @Override
   public void onReceive(Context context, Intent intent) {
       context.startActivity(...);
   }
}

Register the BroadcastReceiver with intent filter:

<receiver android:name="AlarmReceiver">
    <intent-filter>
        <action android:name="wake_up" />
    </intent-filter>
</receiver>

Upvotes: 3

Bruno Carrier
Bruno Carrier

Reputation: 532

Alarm manager is definitely the way to go. You'll need to have a broadcast receiver to receive the alarm, and then set a pending intent in that receiver.

As you mentionned, TimerTask and Handlers won't help you much here.

The easiest way to go with a broadcast receiver is to register it in the android manifest as a broadcast receiver. You can also register them manually, but it's a bit harder conceptually.

Have fun!

Upvotes: 2

Related Questions