Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 推送通知打开时的回调_Android_Notifications_Push Notification - Fatal编程技术网

Android 推送通知打开时的回调

Android 推送通知打开时的回调,android,notifications,push-notification,Android,Notifications,Push Notification,我知道我们可以在通知打开时启动以下活动: NotificationCompat.Builder builder = new NotificationCompat.Builder(this) Intent targetIntent = new Intent(this, MainActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, targetIntent, PendingIntent.FL

我知道我们可以在通知打开时启动以下活动:

NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
Intent targetIntent = new Intent(this, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, targetIntent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent);
//...
但是,如果我不想在活动中使用午餐,而是想运行回调,比如一些onPushOpen,以便在那里选择如何处理通知,那该怎么办呢?单击可以实现这一点。只需发布一些事件,如onPushOpen(),并在任何地方捕获它。使smth像:

Intent targetIntent = new Intent(this, NaughtyActivity.class);

让淘气活动不用布局。仅用于发布事件并完成。

您可以在清单中声明一个活动,称之为NotificationClickHandlerActivity,将其设置为通知的挂起意图的目标,而不是MainActivity

在这个新活动的onCreate方法中,只需调用getIntent,根据intent中的信息(操作、类别、附加)确定下一步需要打开什么,启动您确定的新目标活动或执行一些其他操作,然后从onCreate内部调用finish并立即返回

如果一个活动像这个处理程序一样在onCreate中调用finish,它将永远不会显示给用户,因此用户甚至不会意识到它的存在,他所看到的只是您可能从中启动的其他活动

另外,请记住,您不应该在此处理程序活动的onCreate方法中执行长时间运行的操作,因为这些操作将在UI线程上执行,并将阻止应用程序响应用户输入。如果必须执行更长时间的运行,请将其放入异步任务子类(处理程序活动的静态嵌套类或完全独立的类)中,然后从onCreate方法启动此任务的实例,并在任务启动后立即调用finish。任务将继续在后台运行。如果任务需要一个上下文来执行它必须执行的任何操作,请确保通过调用getApplicationContext向其传递应用程序上下文,并且不要传递活动本身,否则将导致内存泄漏