我目前有一个由多个活动组成的应用程序,其中一个是半透明的。该应用程序有通知,当我点击它时,我希望它在屏幕上当前的任何内容上打开半透明活动。截至目前,如果我的应用程序已关闭,此功能正常,但如果它正在运行且我的叠加活动打开,我的应用程序的其余部分也在前台。我想制作它,以便只有叠加层存在,一旦用户按下它,它将返回到原始应用。
这种模仿谷歌浏览器的标签活动。
我目前正在通过PendingIntent启动我的活动:
val intent = Intent(context, WebOverlayActivity::class.java)
//intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP or PendingIntent.FLAG_ONE_SHOT)
intent.putExtra(ARG_URL, ...)
intent.action = System.currentTimeMillis().toString() //dummy action
val bundle = ActivityOptionsCompat.makeCustomAnimation(context, R.anim.slide_in_right, R.anim.slide_out_right).toBundle()
val pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_ONE_SHOT, bundle)
这些标志是我在其他地方启动活动时的标志,但它们似乎不会影响这个未决意图。如上所述,这项活动是半透明的,并吸引了其他活动。
我觉得这涉及到我将此活动与其他应用任务分开,但我也在我的应用中使用叠加层,并且不确定这是否会影响任何内容。
有什么想法吗?
编辑1:这是活动清单
<activity
android:name=".WebOverlayActivity"
android:theme="@style/AppTheme.Overlay">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!--other data sources-->
</intent-filter>
</activity>
答案 0 :(得分:0)
我终于找到了可行的解决方案。
目标是在新任务中启动活动,因此我通过在活动清单中添加android:launchMode="singleInstance"
来实现。搞砸了我的是我还需要指定taskAffinity
,否则将忽略launchMode。
我现在可以有效地使用叠加层来加载其他应用中的网址并返回到它,或者从我自己的应用中使用它,并使其表现得像其他任何活动一样。