Java 执行Notification.addAction()中的函数,而不是PendingEvent。可能吗?
我希望在按下通知按钮时执行一个方法。为此,我在通知中添加了一个带有Java 执行Notification.addAction()中的函数,而不是PendingEvent。可能吗?,java,android,notifications,android-notifications,Java,Android,Notifications,Android Notifications,我希望在按下通知按钮时执行一个方法。为此,我在通知中添加了一个带有pendingent的操作: Intent intent = new Intent(context, AlertActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); Notification notification = new Notification.Builder(MainActivi
pendingent
的操作:
Intent intent = new Intent(context, AlertActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
Notification notification = new Notification.Builder(MainActivity.this)
.setContentTitle("New Notification")
.setContentText("Click Here")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentIntent(pendingIntent)
.addAction(R.mipmap.ic_launcher, "Test2", pendingIntent)
.build();
notification.flags |= Notification.FLAG_AUTO_CANCEL;
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(0, notification);
这是可行的,但是我不想在用户调用操作时启动活动。我只是需要做些工作
为此,我实现了一个服务
,应该由pendingent
作为目标:
public class MyServices extends IntentService {
public MyServices() {
super("MyServices");
}
@Override
protected void onHandleIntent(Intent intent) {
clearNotification();
}
public void clearNotification() {
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.cancel(0);
Intent intent = new Intent(MyServices.this, MainActivity.class);
//Starting new activity just to check
startActivity(intent);
}
}
我创建了pendingent
,如下所示:
final Intent intent = new Intent(context, MyServices.class);
final PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
但是,当我调用通知上的操作时,什么也没有发生。我做错了什么?通知不是应用程序的一部分。它由操作系统管理。碰巧有一些API可以用来显示/取消/etc通知
挂起的意图允许外部代码(例如通知)启动应用程序/活动/服务/广播接收器。如果没有挂起的意图,这是无法实现的
我的任务是在单击特定操作按钮时执行一些代码,并清除通知;没有开始任何活动
你不必开始一项活动。您可以在没有UI的broadcastreceiver中执行此操作。或者,正如Commonware所建议的那样,使用IntentService,这取决于您在“代码段”中所做的工作。IntentService在单独的线程中处理工作。通知不是应用程序的一部分。它由操作系统管理。碰巧有一些API可以用来显示/取消/etc通知
挂起的意图允许外部代码(例如通知)启动应用程序/活动/服务/广播接收器。如果没有挂起的意图,这是无法实现的
我的任务是在单击特定操作按钮时执行一些代码,并清除通知;没有开始任何活动
你不必开始一项活动。您可以在没有UI的broadcastreceiver中执行此操作。或者,正如Commonware所建议的那样,使用IntentService,这取决于您在“代码段”中所做的工作。IntentService在单独的线程中处理工作。不,这是不可能的。挂起的内容有什么问题?你知道你可以用一个PendingIntent
启动其他组件,而不仅仅是活动,对吗?只需使用服务
。我希望在执行某些代码时不实际启动任何活动(或向用户显示任何内容)。比如,假设通知上说;“正在下雨吗?”操作按钮1:是操作按钮2:否。单击“是”时,引导用户进行某些活动。单击“否”时,清除通知并执行一小段代码,因此不要启动活动。有什么问题吗?只需启动一个服务
或广播接收器
即可。另外,对于通知来说,这将是一个非常奇怪的用例,我不建议您在应用程序中包含任何类似的通知……不,这是不可能的。挂起的内容有什么问题?你知道你可以用一个PendingIntent
启动其他组件,而不仅仅是活动,对吗?只需使用服务
。我希望在执行某些代码时不实际启动任何活动(或向用户显示任何内容)。比如,假设通知上说;“正在下雨吗?”操作按钮1:是操作按钮2:否。单击“是”时,引导用户进行某些活动。单击“否”时,清除通知并执行一小段代码,因此不要启动活动。有什么问题吗?只需启动一个服务
或广播接收器
。这对于通知来说也是一个非常奇怪的用例,我不建议您在应用程序中包含任何类似的通知……甚至更好:在IntentService
中执行,如果要做的工作将需要超过一毫秒左右。但当我单击“否”时,什么也没有发生button@AseedUsmani编辑您的问题,不要在评论中发布代码。现在,我已经为您编辑了您的问题。@AseedUsmani,并定义“什么都没发生”。您是否调试了服务
?真的不叫吗??日志中是否没有解释发生了什么的条目?请注意:活动不一定需要向用户显示某些内容。您可以从挂起的意图启动活动,在onCreate中完成所有工作而不设置布局,最后在完成后调用活动的finish。将“@android:style/Theme.Translucent.NoTitleBar”添加到活动的样式中,用户将不会注意到任何内容。更好的方法是:在IntentService
中执行此操作,前提是要完成的工作将花费超过毫秒。但是,当我单击“否”时,不会发生任何事情button@AseedUsmani编辑您的问题,不要在评论中发布代码。现在,我已经为您编辑了您的问题。@AseedUsmani,并定义“什么都没发生”。您是否调试了服务
?真的不叫吗??日志中是否没有解释发生了什么的条目?请注意:活动不一定需要向用户显示某些内容。您可以从挂起的意图启动活动,在onCreate中完成所有工作而不设置布局,最后在完成后调用活动的finish。将“@android:style/Theme.Translucent.NoTitleBar”添加到活动的样式中,用户将不会注意到任何内容。