2016-08-04 9 views
0

Ich habe eine Benachrichtigung, die ich von einem Dienst anrufe. Ich möchte den Dienst bei Benachrichtigung erneut aufrufen. Der Benachrichtigungsklick ist jedoch nicht in der Lage, in die Methode zu gelangen.Aufruf einer Methode im Dienst nach dem Klick auf die Benachrichtigung

Intent intent = new Intent(this, MyService.class).setAction(ACTION_1); 
PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0,intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT); 

    NotificationCompat.Builder mBuilder = 
      new NotificationCompat.Builder(this) 
        .setSmallIcon(R.drawable.food) 
        .setContentTitle("notification") 
        .setContentText("near by you!"); 
    NotificationManager mNotificationManager =(NotificationManager) getSystemService(Service.NOTIFICATION_SERVICE); 

Methode, die ich anrufen möchten, ist

if (ACTION_1.equals(resultPendingIntent)) { 
     getRecommendation(); 
    } 
     mBuilder.setContentIntent(resultPendingIntent); 
    mNotificationManager.notify(id, mBuilder.build()); 

i folgenden Link versucht haben, aber nicht in der Lage, mein Problem zu lösen. How to execute a method by clicking a notification

Antwort

1

Sie können eine Broadcast in Ihrem Service angeben und starten Sie das über eine PendingIntent in Ihrer Meldung.

Intent stopIntent = new Intent("my.awersome.string.name"); 
PendingIntent stopPi = PendingIntent.getBroadcast(this, 4, stopIntent, PendingIntent.FLAG_CANCEL_CURRENT); 

Dann in Ihrer Meldung Bauer:

NotificationCompat.Builder builder; 
builder = new NotificationCompat.Builder(context) 
    ...  
    .setContentIntent(stopPi); 

In Ihrem Service Sie können Setup ein BroadcastReceiver wie:

private final BroadcastReceiver myReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // Code to run 
    } 
}; 

Sie dieses receiver in Ihrem Service registrieren (möglicherweise in onStartCommand()) nur mit:

registerReceiver(myReceiver, new IntentFilter("my.awersome.string.name")); 

Ihr Service MUSS laufen, damit dies funktioniert.