我有一个播放器,当用户选择一首歌曲时,播放器会通过3个按钮发出通知:上一个,播放,下一个。需要使用此按钮在后台模式下选择歌曲。但是,当我点击这个按钮任何反应。以下是通知的代码:
Intent intentPrev = new Intent(this, NotificationReceiver.class);
intentPrev.setAction(ACTION_PREV);
LocalBroadcastManager.getInstance(this).sendBroadcast(intentPrev);
PendingIntent pendingIntentPrev = PendingIntent.getActivity(this, 0, intentPrev, PendingIntent.FLAG_UPDATE_CURRENT);
Intent intentPlay = new Intent(this, NotificationReceiver.class);
intentPlay.setAction(ACTION_PLAY);
LocalBroadcastManager.getInstance(this).sendBroadcast(intentPlay);
PendingIntent pendingIntentPlay = PendingIntent.getActivity(this, 0, intentPlay, PendingIntent.FLAG_UPDATE_CURRENT);
Intent intentNext = new Intent(this, NotificationReceiver.class);
intentNext.setAction(ACTION_NEXT);
LocalBroadcastManager.getInstance(this).sendBroadcast(intentNext);
PendingIntent pendingIntentNext = PendingIntent.getActivity(this, 0, intentNext, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.notification).
setContentTitle(songs.get(songPos).getTitle()).setContentText(songs.get(songPos).getArtist()).
addAction(R.drawable.previous, "Previous", pendingIntentPrev).addAction(R.drawable.pause, "Pause", pendingIntentPlay).
addAction(R.drawable.next, "Next", pendingIntentNext);
Notification notification = builder.build();
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1, notification);
这是Receiver的代码:
package asus.example.com.player;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import java.util.Objects;
public class NotificationReceiver extends BroadcastReceiver {
private final String ACTION_PREV = "PREVIOUS";
private final String ACTION_PLAY = "PLAY";
private final String ACTION_NEXT = "NEXT";
private final MyService service = new MyService();
@Override
public void onReceive(Context context, Intent intent) {
if (Objects.equals(intent.getAction(), ACTION_PREV)){
service.playPrev();
}
else if (Objects.equals(intent.getAction(), ACTION_NEXT)){
service.playNext();
}
}
}
我也将接收者添加到清单:
<receiver
android:name=".NotificationReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="PREVIOUS"/>
<action android:name="PLAY"/>
<action android:name="NEXT"/>
</intent-filter>
</receiver>
当我在调试器中观看时,我看到没有使用Receiver类,但我不明白为什么
答案 0 :(得分:1)
现在,您正在使用以下语句立即发送广播:
LocalBroadcastManager.getInstance(this).sendBroadcast(intentNext);
您说您想稍后再开始Activity
:
PendingIntent pendingIntentNext = PendingIntent.getActivity(this, 0, intentNext, PendingIntent.FLAG_UPDATE_CURRENT);
(附带说明:仍然无法使用,因为在 intentNext 中,您指定了从BroadcastReceiver
而不是Activity
扩展的类)
应为getBroadcast()
而不是getActivity()
:
Intent intentNext = new Intent(this, NotificationReceiver.class);
intentNext.setAction(ACTION_NEXT);
PendingIntent pendingIntentNext = PendingIntent.getBroadcast(this, 0, intentNext, PendingIntent.FLAG_UPDATE_CURRENT);
另一件事:使用的是 '0' 如在所有请求码(第二个参数)的PendingIntent
S上。您必须为请求代码使用不同的值,因为共享同一请求代码的两个Intent
被视为相同的Intent
,因此最终您将3个通知Button
地雷触发同样的动作。