我想要以下行为: 用户点击通知,Android停止我的服务。
问题是停止服务需要调用stopService,我无法轻易创建一个PendingIntent来执行此操作。
所以我发现这样做的唯一方法是让我的服务收到一个特殊的Intent额外服务,使服务调用stopSelf并停止。
是否有更简单的方法从通知点击中直接取消服务?
答案 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}}来电。