0

我正在实现一个音乐播放器。通知允许用户暂停或跳过歌曲。我用

Intent i = new Intent("com.package.app");
mExpandedView.setOnClickPendingIntent(R.id.next_song, PendingIntent.getBroadcast(this, 0, i, 0));

为了将此点击传输到托管 MediaPlayer 和所有相关方法的 MusicService。我想直接调用该服务的一个方法部分(例如 playNextSong()),但getService()似乎只允许我启动一个新服务,而不是调用服务中的方法,或者获取一些数据。我什至不需要启动服务,因为音乐正在播放,它已经在运行。

那么有没有一种我不知道的方法来做到这一点?或者是:
通知广播到广播接收器,然后广播接收器广播到服务推荐的方式来完成这个动作?它看起来像是一种复杂的方式来做一些简单的事情......

4

2 回答 2

0

为通知创建 PendingIntent 作为广播消息,自定义消息(使用您自己的字符串,如 com.my.custom.broadcast.message.action)。在 AndroidManifest 中创建并注册将由此自定义操作触发的新广播接收器。广播接收器的 OnReceive 方法,根据传递给 onReceive 方法的服务类和上下文参数,使用自定义参数/动作或其他方式启动您的服务。

可能您可以尝试通过为此创建 PendingIntent 来直接启动服务,但我认为最好通过中间步骤来完成:BroadcastReceiver

于 2012-10-03T00:42:10.063 回答
0

从通知中,您可以启动一个活动。该活动将执行“bindService”并调用服务中的适当方法,然后完成()。该活动不需要有 UI,因此用户不会看到它。但这比广播接收器还要多。

于 2012-10-03T09:47:11.103 回答