我在我们的项目中使用了一个外部库。该库显示通知。点击该通知会启动库中的活动。
我想检测活动是否从推送通知启动以跟踪一些分析数据。
有什么方法可以检测到那些通知轻按或活动启动?
答案 0 :(得分:0)
传递一些额外的元数据,以及为显示通知而生成的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);
}
答案 1 :(得分:0)
当然可以。创建Intent
用于启动目标活动时,可以将参数传递给intent,而Activity启动时,仅从intent中获取外部参数,如果这些参数来自Notification
,则您需要执行操作。
答案 2 :(得分:0)
据我了解,您的活动已在通知水龙头上启动。要检测活动启动,可以使用ActivityLifecycleCallbacks。在这种情况下,您将需要覆盖onActivityCreated
/ onActivityStarted
,其中包括创建/启动的活动作为参数。您可以在内部注入分析组件并发送有关已启动活动的事件。
class AppLifecycleCallbacks : ActivityLifecycleCallbacks {
override fun onActivityStarted(activity: Activity) {
if (activity is MyActivity) {
//...
}
}
//...
}