问题
How to control a music player from buttons in notification, and how to listen button action from the notification
回答1:
You should use setOnClickPendingIntent() of RemoteViews to listen button action from the notification.
The method setOnClickPendingIntent() will bind a PendingIntent to response the button click event.
The sample code is like this:
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);
}
update 1:
The service which responses the action is like this:
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
}
}
Register the service in manifest:
<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>
For the music play control,you can copy some useful code sinppets from here.
来源:https://stackoverflow.com/questions/21872022/notification-for-android-music-player