发送PendingIntent后不调用onReceive()

时间:2016-05-20 07:59:00

标签: android android-intent android-pendingintent

我想在同一个Service类中接收PendingIntent。 我在onReceive方法中添加了一个日志,但它从未在LogCat中显示。

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;
  }
}

1 个答案:

答案 0 :(得分:1)

你应该调用stopIntent.setAction而不是intent.setAction。

您的服务中不需要广播接收器。您只需调用PedingIntent.getService即可调用onStartCommand方法。在此方法中,您可以对意图做出反应。