我知道我们可以按照以下方式启动通知活动:
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 ,那么选择如何处理通知点击?
答案 0 :(得分:0)
您可以在清单中声明一个活动,将其命名为NotificationClickHandlerActivity,您将其设置为通知的待处理意图的目标,而不是MainActivity。
在这个新活动的onCreate方法中,只需调用getIntent,根据intent(action,categories,extras)中的信息确定接下来需要打开的内容,启动您确定的新目标活动或执行其他操作动作,然后从内部onCreate调用完成并立即返回。
如果一个活动在onCreate中调用完成就像这个处理程序一样,它将永远不会显示给用户,因此他不会意识到它甚至存在,所有他将看到的是你可能从中启动的另一个活动它
另外,请记住,您不应该在此处理程序活动的onCreate方法中执行长时间运行操作,因为它们将在UI线程上执行,并将阻止您的应用程序响应用户输入。如果你必须做更长时间的运行,把它放在异步任务子类(处理程序活动的STATIC嵌套类,或完全独立的类)中,然后从onCreate方法启动此任务的实例,并在之后调用完成任务开始了。该任务将继续在后台运行。如果任务需要一个上下文来做它必须做的事情,请确保通过调用getApplicationContext将它传递给应用程序上下文,并且不要传递活动本身,否则你将有内存泄漏。
答案 1 :(得分:-2)
您可以使用EventBus来实现这一目标。只需发布一些事件,如onPushOpen(),并在任何你想要的地方捕捉它。让smth像:
Intent targetIntent = new Intent(this, NaughtyActivity.class);
让NaughtyActivity不使用布局。用它来发布事件并完成。