Определить запуск активности - PullRequest
0 голосов
/ 31 января 2019

Я использую внешнюю библиотеку в нашем проекте.Эта библиотека показывает уведомление.При нажатии на это уведомление запускается действие в библиотеке.

Я хочу обнаружить запуск этого действия по push-уведомлению для отслеживания некоторых аналитических данных.

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

Ответы [ 3 ]

0 голосов
/ 31 января 2019

Конечно, да.Когда вы создаете Intent для запуска вашей целевой деятельности, вы можете передавать аргументы в намерение, а когда активность начинается, просто получать внешние аргументы из намерения, и, если эти аргументы получены из Notification, ваши действия нужны.

0 голосов
/ 31 января 2019

Насколько я понимаю, ваша активность уже запущена при нажатии на уведомление.Для обнаружения запуска активности вы можете использовать ActivityLifecycleCallbacks .В таком случае вам нужно будет переопределить onActivityCreated / onActivityStarted, который включает созданную / запущенную активность в качестве аргумента.Вы можете внедрить компонент аналитики внутрь и отправить события о запущенных действиях.

class AppLifecycleCallbacks : ActivityLifecycleCallbacks {
    override fun onActivityStarted(activity: Activity) {
        if (activity is MyActivity) {
            //...
        }
    }

    //...
}
0 голосов
/ 31 января 2019

Передайте некоторые дополнительные метаданные вместе с вашим pending intent, сгенерированным для отображения уведомления.И разобрать же в вашей целевой деятельности.

 Intent destination = new Intent(context, HomeActivity.class);
  destination.putExtra("SOURCE","NOTIFICATION");

    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, destination, PendingIntent.FLAG_CANCEL_CURRENT);

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context)
            .setContentTitle("Notification Title")
            .setAutoCancel(true)
      .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
            .setContentIntent(pendingIntent)
            .setContentInfo("App")
            .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))
            .setColor(context.getColor(R.color.colorAccent))
            .setLights(Color.RED, 1000, 300)
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setSmallIcon(R.drawable.ic_like);

 NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());

И на уровне активности:

if(getIntent().getStringExtra("SOURCE").equals("NOTIFICATION")){
  // launched from notification
}

Если ваша деятельность уже выполняется, ваше намерение может быть доставлено:

@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
    }
...