检测 Activity 启动
Detect Activity Launch
我在项目中使用外部库。显示通知的图书馆。点击该通知会在库中启动 activity。
我想检测 activity 从推送通知启动以跟踪一些分析数据。
有什么方法可以检测这些通知点击或 activity 启动吗?
传递一些额外的元数据以及为显示通知而生成的 pending intent
。并在您的目的地 activity 中进行相同的解析。
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());
并且在 activity 级别:
if(getIntent().getStringExtra("SOURCE").equals("NOTIFICATION")){
// launched from notification
}
如果您的 activity 已经 运行,您的意图可能会传送到:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
}
当然可以。当你创建 Intent
来启动你的目标 activity 时,你可以将参数传递给意图,当 Activity 开始时,只需从意图中获取外部参数,如果这些参数来自 Notification
做你的行动需要。
据我了解,您 activity 已经在点击通知时启动。要检测 activity 启动,您可以使用 ActivityLifecycleCallbacks。在这种情况下,您将需要覆盖 onActivityCreated
/onActivityStarted
,其中包括 created/started activity 作为参数。您可以在内部注入分析组件并发送有关已启动活动的事件。
class AppLifecycleCallbacks : ActivityLifecycleCallbacks {
override fun onActivityStarted(activity: Activity) {
if (activity is MyActivity) {
//...
}
}
//...
}
我在项目中使用外部库。显示通知的图书馆。点击该通知会在库中启动 activity。
我想检测 activity 从推送通知启动以跟踪一些分析数据。
有什么方法可以检测这些通知点击或 activity 启动吗?
传递一些额外的元数据以及为显示通知而生成的 pending intent
。并在您的目的地 activity 中进行相同的解析。
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());
并且在 activity 级别:
if(getIntent().getStringExtra("SOURCE").equals("NOTIFICATION")){
// launched from notification
}
如果您的 activity 已经 运行,您的意图可能会传送到:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
}
当然可以。当你创建 Intent
来启动你的目标 activity 时,你可以将参数传递给意图,当 Activity 开始时,只需从意图中获取外部参数,如果这些参数来自 Notification
做你的行动需要。
据我了解,您 activity 已经在点击通知时启动。要检测 activity 启动,您可以使用 ActivityLifecycleCallbacks。在这种情况下,您将需要覆盖 onActivityCreated
/onActivityStarted
,其中包括 created/started activity 作为参数。您可以在内部注入分析组件并发送有关已启动活动的事件。
class AppLifecycleCallbacks : ActivityLifecycleCallbacks {
override fun onActivityStarted(activity: Activity) {
if (activity is MyActivity) {
//...
}
}
//...
}