以恢复历史记录的方式恢复我的应用程序

时间:2015-09-24 08:17:10

标签: android android-activity

我正在编写一个用于托管应用的SDK。我的SDK会创建一个需要恢复应用的通知,就像您按下任务按钮并选择应用一样,或者长按主页按钮并选择您的应用。

这是我一直想做的事情:

        PackageManager packageManager = context.getPackageManager();
        intent = packageManager.getLaunchIntentForPackage(context.getPackageName());
        intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
        intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

        PendingIntent pendingIntent = PendingIntent.getActivity(context, 10, intent, flags);
        Notification notification = new NotificationCompat.Builder(context).
            setContentIntent(pendingIntent).
            ...
            build();

        getNotificationManager().notify(NOTIFICATION_ID, notification);

我一直在主机应用程序上测试这个,其中一个启动器活动的午餐模式为“默认”(清单中没有设置启动模式),我的sdk也有午餐模式“singleTask”的1个活动。

  1. 所以我在应用程序中午餐
  2. 启动我的SDK活动,它会在onCreat方法中触发测试通知。
  3. 我按回家
  4. 我点击通知。
  5. 执行这些步骤后,我希望返回到我的活动,但它会打开另一个主机启动器活动的实例。我错过了什么?我如何使这项工作?

3 个答案:

答案 0 :(得分:1)

如果您想从暂停的地方继续,请删除标记" NEW_TASK "。它不会成为新的任务。希望您发现它对您的任务有帮助。

答案 1 :(得分:0)

根据您的要求,主机应用需要设置" singleTop"在启动器活动上启动模式,从SDK中无法设置它。不知何故,您需要告诉主机应用程序设置此标志。

设置" singleTop"启动模式,您将通过覆盖onNewIntent()方法获得新意图,并且您的活动将处于与之前相同的状态。

答案 2 :(得分:0)

在您的AndroidManifest.xml文件中,转到主要活动的声明并使用android:launchMode="singleTask",如下所示:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:launchMode="singleTask"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

这样,如果任务已在后台运行,系统会将其置于前台,让用户在活动被推送到后台之前继续他正在做的事情。