我正在编写一个用于托管应用的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个活动。
执行这些步骤后,我希望返回到我的活动,但它会打开另一个主机启动器活动的实例。我错过了什么?我如何使这项工作?
答案 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>
这样,如果任务已在后台运行,系统会将其置于前台,让用户在活动被推送到后台之前继续他正在做的事情。