4

У меня есть простая задача - активировать приложение с нажатием на определенный вид деятельности (а не на начальной активности)«умный» активация Android от нажимной уведомления

визуализации У меня есть 3 мероприятия в приложении:

  1. А (всплеск)
  2. В (список пунктов)
  3. С (отдельные детали пункт)

Некоторые предварительно requireme nts:

  • С нажимом я получаю идентификатор элемента для выбора.
  • На всплеск я заставляю аутентификацию.
  • Одно из условий - я не мог переместить аутентификацию, скажем, другому действию или службе приложения, например.

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

  1. Когда толчок прибыл PushIntentService генерирует уведомление, которое задает идентификатор товара в намерениях статистов Если приложение было прекращено, я должен запустить приложение от активности A (принудительной аутентификации)
  2. Если приложение было фоном (работает в фоновом режиме), я должен повторно активировать его в том же месте (чтобы пропустить повторную аутентификацию)
  3. После того, как приложение активировано, я перейду к Activity C с идентификатором элемента, извлеченным из дополнительные услуги.

Прямо сейчас я использую следующий код для генерации уведомления (пункт 1, Xamarin.Android синтаксис):

var resultIntent = new Intent(Application.Context, typeof(SplashScreen)); 
resultIntent.AddFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop); 
if (extras.ContainsKey("ItemId")) 
{ 
    var itemId = extras["ItemId"]; 
    resultIntent.PutExtra("ItemId", itemId); 
} 
var resultPendingIntent = PendingIntent.GetActivity(Application.Context, 0, resultIntent, 0); 
builder.SetContentIntent(resultPendingIntent); 
var notification = builder.Build(); 

Это уведомление работает абсолютно нормально во всех случаях, но я вижу здесь один вопрос , Я запускаю приложение с самого начала каждый раз, когда я нажимаю на уведомление. Что мне нужно, когда приложение основано на мне. Мне нужно просто его активировать (например, iOS) и перейти к требуемой странице (ускорить активацию и избежать повторной аутентификации).

Как я могу достичь этого и изменить код выше?

+0

согласно моему мнению, вам нужно использовать флаг для этого, я имею в виду, когда ваше приложение открыто, тогда сделайте это правдой, когда приложение закрыто, сделайте его ложным и сохраните этот флаг в общих предпочтениях, поэтому, когда вы получаете уведомление, просто проверьте, что такое значение из флага, если его true, то пропустите шаг, если false, а затем выполните для проверки подлинности его очень простую логику, надеюсь, что это сработает для вас –

+0

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

ответ

0

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

var launchIntent = PackageManager.GetLaunchIntentForPackage(PackageName);

Это именно то, что я хотел, и он отлично работает в моем случае.

+0

Но это не приведет к добавлению каких-либо дополнительных функций (например, вашего «id») из уведомления в приложение, если приложение уже было Бег. Это просто привнесет приложение на передний план в любом состоянии, в котором оно было, когда оно уходит на задний план. Это то, что вы хотели? Ваш вопрос, казалось, указывал, что вам нужно что-то еще. –

0

Для этого необходимо создать новый Activity. Уведомление должно начинаться с Activity (без каких-либо флагов). В onCreate() этого нового Activity, сделать что-то вроде этого:

super.onCreate(...); 
if (!isTaskRoot() && alreadyAuthenticated) { 
    // Go directly to details page 
    Intent redirectIntent = new Intent(this, Details.class) 
    redirect.putExtra("id", itemId); 
    startActivity(redirectIntent); 
else { 
    // This means the app was not running, so redirect to Splash 
    Intent redirectIntent = new Intent(this, Splash.class) 
    startActivity(redirectIntent); 
} 
finish(); 

isTaskRoot() вернется true, если приложение не работает, когда пользователь нажал на Notification. Если приложение уже запущено, оно должно вернуть false.

Чтобы проверить, не прошли ли вы проверку подлинности, вы можете вызвать метод static или указать переменную static или, возможно, у вас есть другой способ сделать это.В зависимости от того, что вы хотите, чтобы стек Activity выглядел, если пользователь уже был включен в «элементы детали» или «список элементов», вы можете добавить SINGLE_TOP и/или CLEAR_TOP флаги при переадресации на детали Activity.

Надеюсь, вы поняли суть.

Смежные вопросы