2016-05-20 17 views
1

Ich möchte den PendingIntent innerhalb der gleichen Service-Klasse erhalten. Ich habe ein Protokoll in der OnReceive-Methode hinzugefügt, aber es wird nie im LogCat angezeigt.onReceive() wird nach dem Senden von PendingIntent nicht aufgerufen

AndroidManifest:

<service android:name=".UpdateService" android:exported="true"> 
    <intent-filter> 
    <action android:name="monitoringStop" /> 
    </intent-filter> 
</service>` 

Updateservice:

public class UpdateService extends Service { 
    public static final String BROADCAST_NAME = "monitoringStop"; 
    private BroadcastReceiver receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     //Never reached 
    } 
}; 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
    //registering   
    IntentFilter filter = new IntentFilter(); 
    filter.addAction(UpdateService.BROADCAST_NAME); 
    registerReceiver(receiver, filter); 

    //creating Intent + PendingIntent 
    Intent stopIntent = new Intent(this, UpdateService.class); 
    stopIntent.setAction(BROADCAST_NAME); 
    PendingIntent pendingIntent = 
     PendingIntent.getBroadcast(this, 1, stopIntent, PendingIntent.FLAG_ONE_SHOT); 

    //adding PendingIntent to action 
    NotificationCompat.Action stopService 
     = new NotificationCompat.Action(R.drawable.stop, getString(R.string.stop), pendingIntent); 

    NotificationCompat.Builder notificationBuilder 
     = new NotificationCompat.Builder(this)//settingText etc. 
      .addAction(stopService); 

    startForeground(1,notificationBuilder.build()); 
    return Service.START_STICKY; 
    } 
} 
+0

wo senden Sie die Sendung?, Geben Sie den Code – John

+0

In der drittletzten Zeile: '.addAction (stopService);' [link] (https://developer.android.com/reference/android/app/Notification .Builder.html # addAction (android.app.Notification.Action)) –

Antwort

1

Sie sollten statt intent.setAction stopIntent.setAction nennen.

Sie benötigen keinen Broadcast-Empfänger in Ihrem Dienst. Sie können einfach PedingIntent.getService aufrufen und die onStartCommand-Methode wird aufgerufen. Innerhalb dieser Methode können Sie auf die Absicht reagieren.

+0

Vielen Dank. Alles funktioniert jetzt. Die Methode onReceive ist nicht mehr erforderlich. –

Verwandte Themen