解决方法
您应该使用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>