我已经读了很多关于该主题的答案,但是没有一个能解决这个问题。
该应用程序正在运行“前台服务”,因此需要通知。
这是创建Intent
的方式。
Intent intent = new Intent(context, notificationClass);
return PendingIntent.getActivity(context, 0, intent, 0);
请注意,从通知中启动的Activity
类在运行时(notificationClass
)是已知的。对于其他情况,有一个库公开了View
,该库在膨胀时会创建Service
,而后者会创建Notification
,并且由于任何Activity
都可以包含View
,请求Class
,以便当用户单击通知时恢复正确的Activity
。
然后,intent
被添加到notificationBuilder
(NotificationCompat.Builder
)。
notificationBuilder.setContentIntent(intent);
在应用程序进入后台然后单击通知时实施此操作,它将创建Activity
的新副本,而不是恢复它。
出于测试目的,通过将Activity
(预先知道)的launchMode
添加到{{1},得到了预期的行为(单击通知后恢复Activity
} singleTop
文件中。但是我无法使其以任何其他方式工作。
由于这些限制,我想知道在创建AndroidManifest.xml
时是否有可能以编程方式获得相同的行为。我尝试了很多Notification
标志组合(也Intent
与addFlags
),但是没有运气。
是否有可能创建一个setFlags
以使其表现出来?
非常感谢!
正在给https://stackoverflow.com/users/769265/david-wasser回答了许多与Intent
相关的类似问题
答案 0 :(得分:0)
不确定我是否完全理解,但是如果您只是想将现有任务放在前台(与从近期任务列表中选择一个任务相同),请尝试以下操作:
PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(packageName);
return PendingIntent.getActivity(context, 0, intent, 0);
packageName
是AndroidManifest.xml
中软件包的名称。
这“启动”了任务的根Activity
,它实际上不会启动任何东西,而只是将现有任务置于前台。
答案 1 :(得分:0)
经过反复试验和测试,我使用以下方法组合使其工作
PackageManager pm = context.getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(context.getPackageName());
intent.setPackage(null);
return PendingIntent.getActivity(context, 0, intent, 0);enter code here
此处的关键部分是intent.setPackage(null);
/**
* (Usually optional) Set an explicit application package name that limits
* the components this Intent will resolve to. If left to the default
* value of null, all components in all applications will considered.
* If non-null, the Intent can only match the components in the given
* application package.
*
* @param packageName The name of the application package to handle the
* intent, or null to allow any application package.
*
* @return Returns the same Intent object, for chaining multiple calls
* into a single statement.
*
* @see #getPackage
* @see #resolveActivity
*/
因此,显然pm.getLaunchIntentForPackage(context.getPackageName());
返回了Intent
,该{限于context.getPackageName()
中的组件,然后需要将包显式设置为null
,以便考虑所有组件。 / p>
尽管我不太确定^。 FWIW添加它,解决了问题\\ _(ツ)_ /¯