从Android Notification启动时的活动奇怪行为

时间:2011-12-15 17:01:56

标签: android android-activity notifications instance

当我处理在C2DM消息到达移动设备时从BroadcastReceiver创建的通知时,我的android应用程序遇到了奇怪的行为。我正在执行以体验此行为的流程如下:

  1. 启动我的应用程序,显示DashboardActivity;
  2. 按主页按钮或后退按钮关闭应用程序;
  3. 接收推送消息并创建通知;
  4. 点击通知项目,启动BookingOfferActivity活动;
  5. 按home或后退按钮或调用finish()
  6. 关闭BookingOfferActivity
  7. 长按主页按钮并从最近的应用程序中选择我的应用程序
  8. 显示BookingOffcerActivity而不是DashboardActivity
  9. 使用以下代码从通知中启动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并通过访问最近打开的应用程序(长按主页按钮)或访问应用程序列表上的启动器图标来重新打开应用程序后,我希望看到仪表板。

    我创建了一个与此相似的问题,但我没有提供太多细节,所以我关闭了另一个并用更多数据打开了这个。

    非常感谢有关如何解决此问题的任何指导

    Ť

1 个答案:

答案 0 :(得分:0)

我不确定,但我认为在您的场景中,第二个活动只是进入活动堆栈的顶部,并将显示直到应用程序不会被杀死。我们有大致相同的问题并且以简单的方式解决它:通知开始主要(第一)活动与额外“立即去第二”。在第一个活动的onCreate中检查此额外内容,并在需要时启动第二个活动。使用此解决方案,您应该小心按下后退按钮 - 如果您不想在“通知开始”的情况下显示第一个活动,您应该在第一个活动的onResume中关注它