Активность странного поведения при запуске из Android-уведомлений - PullRequest
0 голосов
/ 15 декабря 2011

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

  1. Запустите мое приложение, отображается DashboardActivity;
  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 определяется в AndroidManifest следующим образом:

    <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 * 1034

1 Ответ

0 голосов
/ 15 декабря 2011

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

...