2015-08-27 4 views
0

У меня есть приложение, которое использует постоянное уведомление внутри службы и работает в фоновом режиме. Пока эта служба запущена, мне нужно иметь возможность вызвать метод/выполнить некоторые действия при нажатии на уведомление. Однако я не уверен, как это реализовать. Я прочитал много похожих вопросов/ответов, однако ни один из них не ответил явно или в моих целях.This SO вопросы приближаются к тому, чего я пытаюсь достичь, но выбранный ответ трудно понять.Выполнение действия по уведомлению нажмите

Моя служба/уведомление запускается в методе OnCreate() для моего класса BackgroundService ...

Notification notification = new Notification(); 
    startForeground(1, notification); 
    registerReceiver(receiver, filter); 

и эта служба запускается с моей основным видом деятельности по нажатию кнопки:

final Intent service = new Intent(Main.this, BackgroundService.class); 

bStart.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if((counter % 2) == 0){ 

       bStart.setText("STOP"); 
       startService(service); 

      }else { 
       bStart.setText("BEGIN"); 
       stopService(service); 
      } 

      counter++; 

     } 

любого советы принимаются

+0

Не могли бы вы разместить свой класс обслуживания? Желательно, чтобы мой ответ был реализован. – DavidH

ответ

0

Для этого вам необходимо использовать BroadcastReceiver. Взгляните на следующий код. Положите его в Service

private MyBroadcastReceiver mBroadcastReceiver; 
@Override 
onCreate() { 
    super.onCreate(); 
    mBroadcastReceiver = new MyBroadcastReceiver(); 
    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addCategory(Intent.CATEGORY_DEFAULT); 
    // set the custom action 
    intentFilter.addAction("do_something"); 

    registerReceiver(mBroadcastReceiver, intentFilter); 
} 



// While making notification 
Intent i = new Intent("do_something"); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, i, 0); 
notification.contentIntent = pendingIntent; 




public class MyBroadcastReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      switch(action) { 
       case "do_something": 
        doSomething(); 
        break; 
      } 
     } 
    } 

public void doSomething() { 
    //Whatever you wanna do on notification click 
} 

Таким образом, метод doSomething() будет вызываться, когда ваш Notification нажата.

+0

это не сработало. Я поместил журнал в метод onReceive() вместо метода placeholder (doSomething()), но после получения уведомления не получил ответа – Markoe7

+0

@Steve. В этот момент я спрашивал себя: правильно ли зарегистрирован приемник? Правильно ли установлено уведомление.contentIntent, в нужном месте вашего кода? – DavidH

+0

все настроено в правильном месте. Уведомление начато в методе onCreate(), там также зарегистрирован приемник – Markoe7

Смежные вопросы