Глубокая ссылка на приложение, когда приложение уже работает в фоновом режиме

Я реализовал DeeplinkActivity, чтобы поймать схему данных фильтра намерений и открыть действие. Проблема, с которой я сталкиваюсь, заключается в том, что приложение уже открыто в фоновом режиме, а затем пользователь щелкает глубокую ссылку, чтобы открыть действие на главном экране. Если пользователь нажмет «Назад», чтобы выйти из приложения, он перейдет к тому, что работало в фоновом режиме. Я хотел, чтобы он просто вышел из приложения.

Я пробовал это.

        Intent intent = new Intent(this, LaunchActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
        startActivity(intent);

Но это не работает. Какие-либо предложения?


person DDukesterman    schedule 15.09.2014    source источник
comment
Возможно, вы ищете FLAG_ACTIVITY_CLEAR_TASK?   -  person Kevin Coppock    schedule 16.09.2014
comment
Я попробую это и вернусь к вам завтра. Спасибо!   -  person DDukesterman    schedule 16.09.2014
comment
Не работает... Есть ли способ вывести его на передний план, если он запущен, если приложение не открыто?   -  person DDukesterman    schedule 16.09.2014
comment
@DDukesterman: - удачи, так как я тоже столкнулся с той же проблемой.   -  person Adarsh Yadav    schedule 30.12.2015
comment
как ты это решил? Я также сталкиваюсь с этой проблемой. Если приложение открывается до перехода по ссылке, то навигация не работает, пожалуйста, посоветуйте   -  person AngelJanniee    schedule 20.06.2017


Ответы (3)


Я только что решил эту проблему сам.

Сначала вам нужно перейти к манифесту и установить для launchMode значение singleTask, это не позволит вашему приложению полностью открыть новый экземпляр.

Во-вторых, вам нужно перейти к действию, которое принимает этот фильтр намерений, и переопределить этот метод.

override fun onNewIntent(intent: Intent?) {
    super.onNewIntent(intent)
}

теперь, используя новое намерение здесь, вы получите доступ к глубокой ссылке и сможете направить туда, куда вам нужно, в своем приложении.

person Mahmoud Omara    schedule 04.08.2020

Нашел этот почти двухлетний вопрос, столкнувшись с точно такой же проблемой... Возможно, слишком поздно, но для всех, у кого такая же проблема: Мое решение - использовать вместо текущего контекста (активности) контекст приложения. Итак, 3-я строка выглядит так: getApplicationContext().startActivity(intent);

person convexHull    schedule 01.09.2016

На самом деле есть два способа справиться с вашей проблемой:

Либо установите android:launchMode="singleInstance" (ссылка) в манифесте ваша активность, которая вызывается из глубокой ссылки. Итак, деятельность всегда является единственным и единственным членом своей задачи. Таким образом, действие не будет повторно использовать какие-либо задачи из стека в вашем приложении, которое уже запущено. Также будьте осторожны с singleInstance: если вы откроете действие singleInstance с глубокой ссылкой, а затем перейдете оттуда к другому действию и нажмете назад, вы попадете в родительское действие текущего действия, а не в свое действие singleInstance. Таким образом, это каким-то образом разрушает стандартную обратную навигацию, и вам приходится обрабатывать все эти особые случаи, которые могут быть довольно раздражающими.

Или, для API >= 16, вы можете использовать: finishAffinity() (ссылка) в вашем методе onBackPressed() вашей активности, но здесь вы должны как-то различать, было ли приложение открыто через глубокую ссылку, иначе оно закроет ваше приложение, даже если вы хотите просто вернуться к своему основному меню.

person mathew11    schedule 17.03.2017