user2999943
user2999943

Reputation: 2519

Activity gets minimized when launching it from foreground service

I have two Activities in my app:

A - login Activity

B - main Activity

When the user clicks the login button in activity A I am starting a service. In the service's onCreate() method I launch activity B like this:

 Intent notificationIntent = new Intent(this, MainActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

    NotificationCompat.Builder builder = new NotificationCompat
            .Builder(getApplicationContext());
    builder.setContentIntent(pendingIntent);
    builder.setContentTitle("Activity B in foreground service");
    builder.setSmallIcon(R.drawable.ic_launcher);

    startForeground(1, builder.build());

The problem is that Activity B launches minimized. I have to press the service button in the notification bar in order to get my activity maximized (fill the screen). How could I launch Activity B from service in normal way - without minimizing it (putting to background)?

Upvotes: 0

Views: 330

Answers (3)

user2999943
user2999943

Reputation: 2519

Finally I found out the solution:

onCreate() method in service class:

@Override
public void onCreate() {

    Intent notificationIntent = new Intent(getBaseContext(), MainActivity.class);
    notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    getApplication().startActivity(notificationIntent);

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

    NotificationCompat.Builder builder = new NotificationCompat
            .Builder(getApplicationContext());
    builder.setContentIntent(pendingIntent);
    builder.setContentTitle("Activity B runs in a foreground service");
    builder.setSmallIcon(R.drawable.ic_launcher);

    startForeground(1, builder.build());

}

In AndroidManifest.xml add this line in Activity element:

android:launchMode="singleTop"

Upvotes: 0

David Wasser
David Wasser

Reputation: 95578

Your code doesn't actually launch Activity B at all. All it does is create a Notification, that, if selected by the user, will launch Activity B.

If you want to actually launch Activity B, do this:

    Intent notificationIntent = new Intent(this, MainActivity.class);
    notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    // Now launch the activity immediately
    startActivity(notificationIntent);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
    NotificationCompat.Builder builder = new NotificationCompat
        .Builder(getApplicationContext());
    ... (rest of your code here)

Upvotes: 1

Cativail
Cativail

Reputation: 1050

Question already answered in android start activity from service

public void sendMessage(View view) {
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}

http://developer.android.com/training/basics/firstapp/starting-activity.html

Upvotes: 0

Related Questions