我的应用程序(游戏)有两个活动:一个启动器活动,它显示徽标,初始化并是我的应用程序的主要活动,以及一个客户端活动,它执行3D渲染并由启动器活动启动。因此,当应用程序运行时,后栈是:启动器|客户端。
我想要的链接是:
如果应用尚未启动,点击该链接应首先启动启动器活动,然后启动器活动启动客户端活动。最后,游戏在客户活动中运行。
如果应用程序正在运行(在客户端活动中运行),单击该链接应该切换到并通知应用程序单击该链接(在启动器或客户端中都可以,在客户端更好),而不是开始另一个发射器活动。
我尝试过:
我在启动器活动的声明中添加了一个intent过滤器:
<activity android:name=".Launcher" android:label="TestApp">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="myapp" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
<activity android:name=".Client" android:label="TestApp">
</activity>
当我点击链接时,意图过滤器工作:myapp://,启动启动器活动。但问题是启动器活动是在浏览器的任务中启动的。如果我已经有一个应用程序在运行,那么我的应用程序的新实例将在浏览器堆栈中启动,而不是切换到已经运行的应用程序。
然后我尝试将属性android:launchMode="singleTask"
添加到活动声明中。然后单击该链接将启动一个新任务,并在该任务中启动Launcher活动。如果应用程序已经运行,则正在运行的任务将切换到前台,这就是我的期望。但问题是,app任务的后台堆栈是从#34; launcher |更改的客户机&#34;到了#34;启动器&#34;,客户端活动消失了。
我希望我的应用只有一个实例。如果应用未运行,则抓取链接应启动应用,否则切换到应用,而不会影响应用的当前运行状态。
我搜索了很多,但没有找到解决方案,请帮助我,谢谢。