2011-12-15 2 views
0

Я испытываю странное поведение с моим приложением Android при работе с уведомлением, которое создается из BroadcastReceiver, когда сообщение C2DM поступает на мобильное устройство. Поток, который я выполняю, чтобы испытать это поведение, следующий:Действия странное поведение при запуске с Android Notification

  1. Запуск приложения, отображается панель инструментов;
  2. Закройте приложение, нажав кнопку «Главная» или «Назад»;
  3. Получите сообщение push и создайте уведомление;
  4. Нажмите на элемент уведомлений и запустится мероприятие BookingOfferActivity;
  5. Закройте BookingOfferActivity либо нажав дома или кнопку возврата или вызова
  6. Длительное нажатие кнопки домой отделка() и выберите мое приложение из недавних приложений
  7. BookingOffcerActivity отображается вместо DashboardActivity

BookingOfferActivity является начиная с уведомления, используя следующий код:

Intent notificationIntent = new Intent(context, BookingOfferActivity.class); 
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
Bundle b = new Bundle(); 
b.putSerializable("booking", booking); 
notificationIntent.putExtras(b); 

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 

Notification notification = new Notification(icon, tickerText, when); 
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 
long[] vibrate = {0,100,200,300}; 
notification.vibrate = vibrate; 
notification.flags = Notification.FLAG_AUTO_CANCEL; 

NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
mNotificationManager.notify(AppUtil.getNextPushIndexBooking(), notification); 

BookingOfferActivity определен в A ndroidManifest таким образом:

<activity android:name=".activity.BookingOfferActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" /> 

и мой DashboardActivity определяется следующим образом:

<activity android:name=".activity.DashboardActivity" 
       android:label="@string/app_name" 
       android:configChanges="orientation|keyboardHidden" 
       android:windowSoftInputMode="stateHidden|adjustPan"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

Причина я называю это странное поведение, что я хотел бы начать DashboardActivity всякий раз, когда мое приложение запускается или перезагружается пользователем, а не элементом уведомления. Таким образом, после закрытия, завершения или уничтожения BookingOfferActivity и повторного открытия приложения путем доступа к недавно открытому приложению (долгое нажатие на домашней кнопке) или доступа к значку запуска в списке приложений, мне бы хотелось увидеть панель мониторинга.

Я создаю вопрос, похожий на этот, но я не предоставлял слишком много деталей, поэтому я закрыл другой и открыл его с большим количеством данных.

Большое спасибо за каких-либо указаний о том, как решить эту проблему

T

ответ

0

я не уверен, но я полагаю, что в вашем сценарии второй активности просто идти к вершине стека деятельности и будет пока приложение не будет убито. У нас примерно такая же проблема, и мы легко ее разрешаем: уведомление начинает основную (первую) работу с дополнительным «сразу перейти на второй». в onCreate первого действия проверьте это дополнительно и при необходимости начните второе действие. С помощью этого решения вы должны быть осторожны с нажатием кнопки «Назад» - если вы не хотите показывать первую активность в случае «начала уведомления», вам следует позаботиться об этом в onResume первого действия

+0

Hi @ Jin35, я реализовал вашу идею, это кажется мне прекрасным, но как я могу удалить вторую активность из верхней части стека действий после ее завершения? Кажется, что активность будет там, даже если я нажму кнопку «домой» или «назад». Должен ли я использовать для этого какой-то флаг? Благодарим вас за – Thiago

+0

, если вы назовёте завершение() для второго действия, оно будет удалено из стека действий. – Jin35

+0

Это то, что я делаю, когда я закончил со вторым действием, которое я вызываю finish(), но активность всегда находится на вершине стека. Я попытался запустить второе действие с помощью Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP и NO_HISTORY, но он не работал в обоих направлениях. У меня вроде как альтернатива. Спасибо за помощь. – Thiago