解决方法
您应该使用RemoteViews的setOnClickPendingIntent()来监听通知中的按钮操作.
setOnClickPendingIntent()方法将绑定PendingIntent以响应按钮单击事件.
示例代码如下:
- private void showControllerInNotification() {
- PendingIntent pendingIntent = null;
- Intent intent = null;
- //Inflate a remote view with a layout which you want to display in the notification bar.
- if (mRemoteViews == null) {
- mRemoteViews = new RemoteViews(getPackageName(),R.layout.notification_control_bar);
- }
- //Define what you want to do after clicked the button in notification.
- //Here we launcher a service by an action named "ACTION_STOP" which will stop the music play.
- intent = new Intent(ACTION_STOP);
- pendingIntent = PendingIntent.getService(getApplicationContext(),REQUEST_CODE_STOP,intent,PendingIntent.FLAG_UPDATE_CURRENT);
- //In R.layout.notification_control_bar,there is a button view identified by bar_btn_stop
- //We bind a pendingIntent with this button view so when user click the button,it will excute the intent action.
- mRemoteViews.setOnClickPendingIntent(R.id.bar_btn_stop,pendingIntent);
- //Create the notification instance.
- mNotification = new NotificationCompat.Builder(getApplicationContext())
- .setSmallIcon(R.drawable.ic_launcher).setOngoing(true)
- .setWhen(System.currentTimeMillis())
- .setContent(mRemoteViews)
- .build();
- //Show the notification in the notification bar.
- mNotifiManager.notify(NOTIFICATION_ID,mNotification);
- }
更新1:
响应操作的服务是这样的:
- public class MediaPlayerService extends Service {
- public static final String ACTION_STOP="xxx.yyy.zzz.ACTION_STOP";
- public static final String ACTION_PLAY="xxx.yyy.zzz.ACTION_PLAY";
- public static final String ACTION_PAUSE="xxx.yyy.zzz.ACTION_PAUSE";
- @Override
- public int onStartCommand(Intent intent,int flags,int startId) {
- if (intent != null) {
- String action = intent.getAction();
- if (!TextUtils.isEmpty(action)) {
- if (action.equals(ACTION_PLAY)) {
- startPlay();
- }else if(action.equals(ACTION_PAUSE)) {
- pausePlay();
- }else if(action.equals(ACTION_STOP)) {
- stopPlay();
- }
- }
- }
- return super.onStartCommand(intent,flags,startId);
- }
- private void stopPlay(){
- // do the play work here
- }
- private void stopPause(){
- // do the pause work here
- }
- private void stopPlay(){
- // do the stop work here
- }
}
在清单中注册服务:
- <service
- android:name="xxx.yyy.zzz.MusicPlayService"
- android:exported="false" >
- <intent-filter>
- <action android:name="xxx.yyy.zzz.ACTION_PLAY" />
- <action android:name="xxx.yyy.zzz.ACTION_PAUSE" />
- <action android:name="xxx.yyy.zzz.ACTION_STOP" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </service>