【问题标题】:Activity strange behavior when started from Android Notification从 Android 通知启动时的 Activity 奇怪行为
【发布时间】:2011-12-15 17:01:55
【问题描述】:

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

  1. 启动我的应用程序,显示DashboardActivity;
  2. 按主页按钮或返回按钮关闭应用程序;
  3. 接收推送消息并创建通知;
  4. 点击通知项,启动活动BookingOfferActivity;
  5. 通过按主页或返回按钮或调用finish()关闭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

【问题讨论】:

    标签: android android-activity notifications instance


    【解决方案1】:

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

    【讨论】:

    • 嗨@Jin35,我实现了你的想法,对我来说似乎很好,但是完成后如何从活动堆栈顶部删除第二个活动?即使我点击主页或后退按钮,活动似乎也会存在。我应该为此使用某种标志吗?谢谢
    • 如果您为第二个活动调用finish(),它将从活动堆栈中删除。
    • 这就是我正在做的事情,当我完成第二个活动时,我正在调用finish(),但该活动始终位于堆栈的顶部。我尝试使用 Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP 和 NO_HISTORY 开始第二个活动,但它没有双向工作。我在这里没有其他选择了。感谢您的帮助。
    猜你喜欢
    • 2020-04-06
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    相关资源
    最近更新 更多