应用程序在Play商店重新启动打开单击

use*_*732 2 android launchmode

 <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>
Run Code Online (Sandbox Code Playgroud)

所以很简单.当我从启动器图标打开我的应用程序,它opens.I去点击启动我的应用程序图标再次再次带来了我的申请前自open.However,如果我去Play商店,点击打开从那里我的应用程序有两个实例打开.如果你想要一个如何工作的例子,facebook也有同样的问题.另外一个app fotmob也有同样的问题.

Pra*_*pat 8

我有同样的问题.将以下代码放入您的启动器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
}
Run Code Online (Sandbox Code Playgroud)

问题:

假设你有任务堆栈[A - >乙 - > C],A是根系活力,当您启动从Play商店任务堆栈的应用程序将成为(系统清除根顶部)[A],但如果你已经完成了你的根活动堆栈看起来像(系统将创建root Activity的新实例并放置现有任务的顶部)[B - > C - > A].

为什么?

因为Play商店将使用category = LAUNCHER启动app,action = MAIN,flag = ACTIVITY_NEW_TASK,flag = ACTIVITY_BROUGHT_TO_FRONT

假设您已删除了根活动,现在您的堆栈是[B - > C],当您尝试从Play商店打开应用程序时,您的堆栈变为[B - > C - > A]

现在,A不在堆栈的根目录中并且具有category = LAUNCHER和action = MAIN所以,我们可以使用finish()删除A并且堆栈将保持相同[B - > C]

*注意:在Android 7.0上测试过