Начало активности на спине нажата - PullRequest
0 голосов
/ 05 октября 2018

У меня есть приложение, в котором я показываю некоторые уведомления.После того, как пользователь щелкнет по нему, запускается некий Activity, назовем его Activity B.После того, как пользователь нажал кнопку «Назад», приложение закрылось, но я хочу не закрыть приложение, а отправить его на Activity A, то есть приложение MainActivity, и оно запускается первым, когда приложение открывается обычным способом.Если приложение запускается не из push-уведомления, а MainActivity запускается как первая, это работает хорошо.Я попытался использовать android:parentActivityName=".ui.main.MainActivity" в моем манифесте для этого Activity B, но это не имеет никакого эффекта.

Есть ли способ справиться с этим умно, или мне просто нужно запустить MainActivity?

Ответы [ 9 ]

0 голосов
/ 05 октября 2018

Вы должны создать намерение с бэк-стеком при открытии уведомления.Ваш случай хорошо документирован в документации Android, и вы можете найти то, что вам нужно здесь

Регулярная деятельность - ваш случай:

Это действие, которое существует как часть обычного UX-потока вашего приложения.Поэтому, когда пользователь приходит в действие из уведомления, новая задача должна включать полный задний стек, что позволяет ему нажимать Назад и перемещаться вверх по иерархии приложения.

0 голосов
/ 05 октября 2018

Итак, благодаря ответу Пьетро Скарампеллы я нашел то, что хотел.

val resultPendingIntent = TaskStackBuilder.create(context).apply { addNextIntentWithParentStack(intent) }.getPendingIntent(messageId, PendingIntent.FLAG_ONE_SHOT)

intent здесь есть намерение, которое я хочу начать, затем я передаю свой resultPendingIntent к моему уведомлению с

NotificationCompat.Builder(context, channelId) [...] .setContentIntent(resultPendingIntent)

Также я добавил в свою деятельность в манифесте

android:parentActivityName=".ui.main.MainActivity"

Теперь, когда я нажимаю на мойУведомление о моей желаемой активности запускается, и когда я нажимаю кнопку «назад» MainActivity запускается.

Спасибо, ребята;)

0 голосов
/ 05 октября 2018

Вы должны переопределить onBackPressed () и запустить MainActivity внутри него, как показано ниже

 public void onBackPressed() {

 startActivity(new Intent(CurrentActivity.this,MainActivity.class));

 }
0 голосов
/ 05 октября 2018

То, что вы хотите достичь, называется Up Navigation.

Это действие, которое также должно вызываться при нажатии кнопки Back на Toolbar (или ActionBar), если actionBar.setDisplayHomeAsUpEnabled()включен.Для этого вы должны объявить соответствующую родительскую активность для каждого действия в приложении через манифест (кроме основного).

В вашем случае вы можете реализовать переход вверх при вызове onBackPressed с помощью NavUtils, напримерэто:

NavUtils.navigateUpFromSameTask(this)

Подробнее об этом здесь .

0 голосов
/ 05 октября 2018

Используйте как:

public void onBackPressed()  
{  
  if(isTaskRoot()){
    this.startActivity(new Intent(BActivity.this,AActivity.class));  
    }
  finish()
}
0 голосов
/ 05 октября 2018

Убедитесь, что вы не вызываете finish(); после передачи намерения из MainActivity в действие B.

Вы можете просто использовать следующий код для запуска намерения из MainActivity в действие B:

Intent intent = new Intent(MainActivity.this, ActivityB.class);

startActivity(intent);

Вы также можете использовать startActivityForResult();, если вы хотите отправить некоторые данные обратно в MainActivity из действия B.

Вы можете обратиться к этой ссылке для Android Intents для получения более подробной информации оит.

https://developer.android.com/reference/android/content/Intent

0 голосов
/ 05 октября 2018

переопределить onBackPress в вашей активности

override fun onBackPressed() {

    val intent = Intent(applicationContext,Activity::class.java)
    startActivity(intent)
}
0 голосов
/ 05 октября 2018

Вы можете сделать следующее в своей Деятельности

Путь Java:

@Override
public void onBackPressed() {
   Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);
   myIntent.putExtra("key", value); //Optional parameters
   CurrentActivity.this.startActivity(myIntent);
}

Путь Котлина:

override fun onBackPressed() {
   val myIntent: Intent = Intent(applicationContext, NextActivity::class.java);
   myIntent.putExtra("key", value); //Optional parameters
   startActivity(myIntent);
}
0 голосов
/ 05 октября 2018

Переопределить метод onBackPressed в BActivity следующим образом:

public void onBackPressed()  
{  
    this.startActivity(new Intent(BActivity.this,AActivity.class));  

    return;  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...