2015-02-02 3 views
0

У меня есть две деятельности в моем приложении:активность сворачивается при запуске его из службы переднего плана

A - Войти активность

B - основная активность

Когда пользователь нажимает на кнопку входа в деятельности А.И. я начинаю обслуживание. В методе сервиса OnCreate() запускает активность B, как это:

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

Проблема заключается в том, что активность B запускает минимизирован. Я должен нажать кнопку обслуживания на панели уведомлений, чтобы максимизировать мою активность (заполнить экран). Как я мог запустить Activity B из сервиса обычным способом - не сводя его к минимуму (помещая на задний план)?

ответ

1

Ваш код не на самом деле запустить активность B на всех. Все это делает создать Notification, что, если выбранный пользователем, будет запущена активность B.

Если вы хотите на самом деле запустить активность B, сделайте следующее:

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) 
+0

Ваше решение работает, но когда я надавливаю на службу Notifcation позже - Activity B перезагружается в исходное состояние. Например, если я открываю фрагмент в Activity B и нажимаю кнопку Notifcation службы - перезагрузка Activity B без открытого фрагмента. Такое поведение я не заметил в своем первоначальном примере кода. Может быть, есть способ открыть сервисное уведомление программно? – user2999943

+1

Вы можете исправить это, добавив 'Intent.FLAG_ACTIVITY_SINGLE_TOP' в' notificationIntent' или объявив Activity B с 'launchMode =" singleTop "' в манифесте. Это предотвратит создание Android нового экземпляра Activity B, если в вашей задаче уже есть экземпляр Activity B в верхней части стека действий. –

0

Наконец я узнал решение метод

OnCreate() в классе обслуживания::

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

} 

в AndroidManifest.xml добавить эту строку в элемент активность:

android:launchMode="singleTop" 
Смежные вопросы