1

我想在通知中使用三个操作按钮来控制媒体服务,并且很难找到代码的工作示例:Vogella 有一个教程,但他使用一个按钮并打开一个活动而不是服务。我发现了其他几个此类教程和示例,但没有一个具有三个工作操作按钮的类似教程,这些教程演示了服务和多个操作的意图的构造,以及 stackoverflow 上操作按钮使用的大多数当前示例都适用于较低android 版本,使用单一意图按钮,...

这是我想用来设置通知的代码:

//individual intents for each action???
Intent Back = new Intent(this, MusicService.class );
Back.putExtras("back", 1);
Back.putExtras("play", 0);
Back.putExtras("next", 0);

Intent Play = new Intent (this, MusicService.class);
Back.putExtras("back", 0);
Back.putExtras("play", 1);
Back.putExtras("next", 0);

Intent Next = new Intent (this, MusicService.class);
Next.putExtras("back", 0);
Next.putExtras("play", 0);
Next.putExtras("next", 1);


//do I need to make three pending intents????
PendingIntent pIntentback = PendingIntent.getService(this, 0, Back, 0);
PendingIntent pIntentplay = PendingIntent.getService(this, 0, Play, 0)
PendingIntent pIntentnext = PendingIntent.getService(this, 0, Next, 0)


Notification noti = new Notification.Builder(this)
.setContentTitle("Juke Box Hero")
.setContentText("Playing ")
.setSmallIcon(R.drawable.ic_launcher)
.addAction(R.drawable.back, "", pIntentback)
.addAction(R.drawable.play, "", pIntentplay)
.addAction(R.drawable.next, "", pIntentnext)
.build();

NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

noti.flags = Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, noti);

我这里有几个问题...

1) 上面的代码是我应该如何设置操作按钮、意图和待处理的意图?

2)因为我想接收服务中未决意图包装的意图,所以我在调用getService而不是getActivity时是否正确?

3)如果我能够直接在 MusicService 类中接收意图,我如何在不重新启动服务的情况下接收服务中的意图(从而丢失存储在内存中的数据)?

4)还是我需要构建一个接收器类来扩展 BroadcastReceiver 类并将其注册到清单中,然后将相应的意图发送到 MusicService 类?

请理解,我非常愿意研究和编写代码——并且在询问之前已经这样做了好几天,但我需要这些问题的直接答案......

非常感谢帮助和指导

4

1 回答 1

1

1) 上面的代码是我应该如何设置操作按钮、意图和待处理的意图?

答案 #1) 不,为了设置触发和激活适当活动或服务的待处理意图,该意图应该有一个 setAction(在此处插入您的操作名称),并且相应的待处理意图应该在待处理意图中使用更新当前标志(请参阅下面对数字 2 的示例代码)

意图应该是这样的......

Intent Play = new Intent (this, Receiver.class);
Play.setAction("Play");
Play.putExtra("back", 0);
Play.putExtra("play", 1);
Play.putExtra("next", 0);

2)因为我想接收服务中未决意图包装的意图,所以我在调用getService而不是getActivity时是否正确?

答案 #2) 不,我使用了一个广播接收器类来捕获从通知发送的意图;有必要使用 getBroadcast 并确保应用程序上下文(可能不是必需的,但似乎是个好主意)以下列方式附加——

PendingIntent pIntentback = PendingIntent.getBroadcast(this.getApplicationContext(), 0, Play, PendingIntent.FLAG_UPDATE_CURRENT);

3)如果我能够直接在 MusicService 类中接收意图,我如何在不重新启动服务的情况下接收服务中的意图(从而丢失存储在内存中的数据)?

回答#3)我避免了这个问题,但是在对这个想法进行了一些研究之后,似乎您可以在服务类中构建一个接收器来处理这种情况......我目前无法提供有关效果的详细信息和这样的要求,但是我使用的外部广播接收器系统不会中断音乐服务或重置已经通过原始服务意图的信息......

4)还是我需要构建一个接收器类来扩展 BroadcastReceiver 类并将其注册到清单中,然后将相应的意图发送到 MusicService 类?

答案#4)如上所述,不需要在服务外部构建接收器类,但它似乎最容易操作而不会损坏完美运行的服务类......接收器类中的个人意图通过附加的操作键,然后操作所需的特定意图被构建以发送到服务类......

于 2013-09-16T00:10:29.810 回答