Notification for android music player

后端 未结 1 1939
耶瑟儿~
耶瑟儿~ 2021-01-02 23:40

How to control a music player from buttons in notification, and how to listen button action from the notification

相关标签:
1条回答
  • 2021-01-03 00:17

    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.

    0 讨论(0)
提交回复
热议问题