是否有一种直接的方法来停止服务以响应用户点击通知?

时间:2012-02-11 16:07:56

标签: android android-service android-notifications

我想要以下行为: 用户点击通知,Android停止我的服务。

问题是停止服务需要调用stopService,我无法轻易创建一个PendingIntent来执行此操作。

所以我发现这样做的唯一方法是让我的服务收到一个特殊的Intent额外服务,使服务调用stopSelf并停止。

是否有更简单的方法从通知点击中直接取消服务?

2 个答案:

答案 0 :(得分:13)

感谢CommonsWare。

以下是您感兴趣的人的快速解决方案。

代码在服务类中。

// Create Notification 
private void initNotification() {     
  //Register a receiver to stop Service   
  registerReceiver(stopServiceReceiver, new IntentFilter("myFilter"));
  PendingIntent contentIntent = PendingIntent.getBroadcast(this, 0, new Intent("myFilter"), PendingIntent.FLAG_UPDATE_CURRENT);
  notification.setLatestEventInfo(context, contentTitle, contentText,contentIntent);  
  mNotificationManager.notify(NOTIFICATION_ID,notification);  
...
}



//We need to declare the receiver with onReceive function as below
protected BroadcastReceiver stopServiceReceiver = new BroadcastReceiver() {   
  @Override
  public void onReceive(Context context, Intent intent) {
  stopSelf();
  }
};

答案 1 :(得分:6)

您可以创建一个执行BroadcastReceiver调用的简单stopService(),并使用getBroadcast() PendingIntent来触发它。 BroadcastReceiver可以在清单中注册,也可以registerReceiver()本身通过Service注册(在后一种情况下,它会stopSelf()而不是stopService()

然而,这可能不比你拥有的更简单,并且无法直接触发来自stopService()的{​​{1}}来电。