Как остановить обслуживание из собственного уведомления переднего плана

У меня работает Service . И в его onStartCommand я делаю startforeground чтобы избежать убийства системой.

 public int onStartCommand(Intent intent, int flags, int startId) { if (ACTION_STOP_SERVICE.equals(intent.getAction())) { Log.d(TAG,"called to cancel service"); manager.cancel(NOTIFCATION_ID); stopSelf(); } NotificationCompat.Builder builder = new NotificationCompat.Builder(this); builder.setContentTitle("abc"); builder.setContentText("Press below button to stoP."); builder.setPriority(NotificationCompat.PRIORITY_HIGH); builder.setSmallIcon(R.drawable.ic_launcher); Intent stopSelf = new Intent(this, SameService.class); stopSelf.setAction(this.ACTION_STOP_SERVICE); PendingIntent pStopSelf = PendingIntent.getService(this, 0, stopSelf,0); builder.addAction(R.drawable.ic_launcher, "Stop", pStopSelf); manager.notify(NOTIFCATION_ID, builder.build()); } 

Но после нажатия кнопки, PendingIntent не работает, и моя activity не останавливается на нем.

Может кто-нибудь, пожалуйста, скажите, что я делаю здесь или какое-либо другое решение, чтобы остановить обслуживание из предварительного notification сделанного мной.

благодаря

Отвечая на мой собственный вопрос ради других искателей, подобных мне.

Проблема была в строке ниже

  PendingIntent pStopSelf = PendingIntent.getService(this, 0, stopSelf,0); 

Это, в конце концов, было причиной проблемы. Я заменил это на PendingIntent.FLAG_CANCEL_CURRENT, и теперь это сработало.

Для получения дополнительных пояснений ознакомьтесь с FLAG_CANCEL_CURRENT или FLAG_UPDATE_CURRENT .

Вышеупомянутая идея не будет работать должным образом. Служба должна сначала остановить поток, поэтому иногда вы видите странное поведение. Вы должны поместить некоторый флаг внутри вашего метода loop / computation и вызвать « return; », а затем вы можете остановить службу stopself() или просто ждать, пока он не закончит сам. В случае необходимости я могу показать. Поэтому, пожалуйста, спросите.