应用程序在 Play 商店打开时重新启动点击
App restarting on play store open click
<activity
android:name=".activity.landingpage.LandingPageActivity"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
就这么简单。当我从启动器图标打开我的应用程序时,它 opens.I 去并再次单击启动器我的应用程序图标,它再次将我的应用程序带到前面,因为它 open.However,如果我去 Play 商店并单击打开从那里我的应用程序打开了两个实例。
如果你想要一个如何工作的例子,facebook 有同样的问题。我认为另一个应用程序 fotmob 也有同样的问题。
我有同样的问题。将以下代码放入您的启动器 Activity
.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!isTaskRoot()
&& getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
&& Intent.ACTION_MAIN.equals(getIntent().getAction())) {
finish();
return;
}
//other code
}
问题:
假设你有任务堆栈 [A -> B -> C] 并且 A 是根 Activity,
当您从 Play 商店启动应用程序时,任务堆栈将变为(系统清除根的顶部)[A] 但是如果您完成了根 Activity 堆栈将看起来像(系统将创建根的新实例 Activity 并放在现有任务的顶部) [B -> C -> A].
为什么?
因为 Play 商店将启动 category=LAUNCHER, action=MAIN, flag = ACTIVITY_NEW_TASK, flag = ACTIVITY_BROUGHT_TO_FRONT
的应用
解决方案
举个例子,你已经删除了你的根 activity,现在你的堆栈是 [B -> C],当你尝试从 Play 商店打开应用程序时,你的堆栈变成 [B -> C -> A]
现在,A 不在堆栈的根目录中并且具有 category = LAUNCHER 和 action = MAIN 因此,我们可以使用 finish() 删除 A 并且堆栈将保持不变 [B -> C]
*注意:在 android 7.0
上测试
<activity
android:name=".activity.landingpage.LandingPageActivity"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
就这么简单。当我从启动器图标打开我的应用程序时,它 opens.I 去并再次单击启动器我的应用程序图标,它再次将我的应用程序带到前面,因为它 open.However,如果我去 Play 商店并单击打开从那里我的应用程序打开了两个实例。 如果你想要一个如何工作的例子,facebook 有同样的问题。我认为另一个应用程序 fotmob 也有同样的问题。
我有同样的问题。将以下代码放入您的启动器 Activity
.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!isTaskRoot()
&& getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
&& Intent.ACTION_MAIN.equals(getIntent().getAction())) {
finish();
return;
}
//other code
}
问题:
假设你有任务堆栈 [A -> B -> C] 并且 A 是根 Activity, 当您从 Play 商店启动应用程序时,任务堆栈将变为(系统清除根的顶部)[A] 但是如果您完成了根 Activity 堆栈将看起来像(系统将创建根的新实例 Activity 并放在现有任务的顶部) [B -> C -> A].
为什么?
因为 Play 商店将启动 category=LAUNCHER, action=MAIN, flag = ACTIVITY_NEW_TASK, flag = ACTIVITY_BROUGHT_TO_FRONT
的应用解决方案
举个例子,你已经删除了你的根 activity,现在你的堆栈是 [B -> C],当你尝试从 Play 商店打开应用程序时,你的堆栈变成 [B -> C -> A]
现在,A 不在堆栈的根目录中并且具有 category = LAUNCHER 和 action = MAIN 因此,我们可以使用 finish() 删除 A 并且堆栈将保持不变 [B -> C]
*注意:在 android 7.0
上测试