Android в ожидании намерения возобновить работу приложения без начала активности - PullRequest
1 голос
/ 25 марта 2020

Есть ли способ возобновить работу приложения из фона в фоновом режиме без начала активности?

В моем приложении 20 действий. Когда я получаю уведомление, я не могу знать, какая активность сейчас самая популярная. Могу ли я как-то возобновить все приложение на переднем плане (не вызывая какую-либо активность с флагами SingleTop, ReoderToTop и т. Д., А просто переместив существующее приложение на передний план)?

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Ваш код слишком сложен. Вам не нужен манекен Activity. Вы должны просто делать то, что делает Android, когда оно запускает приложение с экрана HOME.

Используйте «намерение запуска» в своем уведомлении:

val intent = getPackageManager().
                    getLaunchIntentForPackage("my.package.name")

Если ваше приложение уже запущено это выведет приложение на передний план без создания каких-либо новых компонентов. Если приложение еще не запущено, оно запустится, запустив root Activity.

0 голосов
/ 25 марта 2020

Я нашел одно решение, оно может выглядеть утомленным, но оно работает.

1) Создайте пустышку. Это действие будет использоваться в качестве отправной точки для ожидающего намерения.

class DummyPendingIntentActivity:AppCompatActivity()
{
    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
    }
}

2) Сделано это логикой c в onCreate из пустышки. В этом методе вы можете проверить, есть ли какие-либо действия в стеке и возобновить их, если это необходимо, или вы можете перезапустить свое приложение, запустив действие «запуска»

//Here we check if there any activities in stack
override fun onCreate(savedInstanceState: Bundle?)
{
    if(isTaskRoot)
    {
        //No previous activity running will restart app
        val intent = Intent(this,YourFirstLauncherAcitivity::class.java)
        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
        startActivity(intent)
    }
    else
    {
        //Has some previous activity so will finish to show it
        finish()
    }
}

3) Вызвать эту фиктивную начальную точку в любой ожидающей намерение, и вы возобновите свое приложение или перезапустите его при необходимости.

val intent = Intent(context,DummyPendingIntentActivity::class.java)
val pendingIntent = PendingIntent.getActivity(AppClass.getApp(), 777, intent, 0)
...
setContentIntent(pendingIntent)
...