Media Player controls in Notification

前端 未结 5 755
没有蜡笔的小新
没有蜡笔的小新 2021-02-01 19:14

I have written complete Music Player to stream music from the web, but I don\'t know how to put media player controls in Notification and when the screen is Lock.

I am f

5条回答
  •  刺人心
    刺人心 (楼主)
    2021-02-01 19:53

    Did you find a solution? I can explain to you with another code. It's a little bit similar, but I have modified it because I am playing a Streaming Audio. Let me know if you need some help.

    I just want to share with you my showNotification() method

    private void showNotification() {
    
        if (intent.getAction().equals(Constants.ACTION.STARTFOREGROUND_ACTION)) {
    
            //Start IntentNotification
            Log.i(LOG_TAG, "Received Start Foreground Intent ");
            Intent notificationIntent = new Intent(ForegroundService.this, MainActivity.class);
            notificationIntent.setAction(Constants.ACTION.MAIN_ACTION);
    
            //With this settings you can open the same Activity without recreate.
            //But you have to put in your AndroidManifest.xml the next line: to your Activity
            //activity android:name=".MainActivity" android:launchMode="singleInstance"
    
            notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
                    notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
            //Intent for Play
            Intent playIntent = new Intent(this, ForegroundService.class);
            playIntent.setAction(Constants.ACTION.PLAY_ACTION);
            PendingIntent pplayIntent = PendingIntent.getService(this, 0, playIntent, 0);
    
            //Intent for Pause
            Intent pausaIntent = new Intent(this, ForegroundService.class);
            pausaIntent.setAction(Constants.ACTION.PAUSE_ACTION);
            PendingIntent pauseIntent = PendingIntent.getService(this, 0, pausaIntent, 0);
    
            //Intent for Close
            stopIntent = new Intent(this, ForegroundService.class);
            stopIntent.setAction(Constants.ACTION.CLOSE_ACTION);
            PendingIntent closeIntent = PendingIntent.getService(this, 0, stopIntent, 0);
    
            //Icon for your notification
            Bitmap icon = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
    
            notifManager =
                    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    
    
            PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0,
                    new Intent(getApplicationContext(), MainActivity.class),
                    PendingIntent.FLAG_UPDATE_CURRENT);
    
            // Build the notification object.
            mNotificationBuilder = new Notification.Builder(this)
                    .setContentTitle("Thinking out Loud")
                    .setContentText("Ed Sheeran")
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setLargeIcon(Bitmap.createScaledBitmap(icon, 128, 128, false))
                    .setContentIntent(pendingIntent)
                    .setOngoing(true)
                    .addAction(R.drawable.ic_play_service, "PLAY", pplayIntent) //you can set a specific icon
                    .addAction(R.drawable.ic_pause_service, "PAUSE", pauseIntent) //you can set a specific icon
                    .addAction(R.drawable.ic_close_service, "CLOSE", closeIntent);//you can set a specific icon
    
            startForeground(Constants.NOTIFICATION_ID.FOREGROUND_SERVICE, mNotificationBuilder.build());
    
        } else if (intent.getAction().equals(Constants.ACTION.PLAY_ACTION)) {
            Log.i(LOG_TAG, "Clicked Play");
    
            //Click Play notification
        } else if (intent.getAction().equals(Constants.ACTION.PAUSE_ACTION)) {
            Log.i(LOG_TAG, "Clicked PAUSE");
    
            //This is for Pause
        } else if (intent.getAction().equals(Constants.ACTION.CLOSE_ACTION)) {
            Log.i(LOG_TAG, "Clicked Close");
    
            //This is for close the NotificationService
            stopForeground(true);
    
        } else if (intent.getAction().equals(Constants.ACTION.STOPFOREGROUND_ACTION)) {
            Log.i(LOG_TAG, "Received Stop Foreground Intent");
            stopForeground(true);
    
            //Stop Notification Service
            stopSelf();
        }
    }
    

    My Constants.class

    public class Constants {
        public interface ACTION {
            public static String MAIN_ACTION = "action.main";
            public static String PREV_ACTION = "action.prev";
            public static String PLAY_ACTION = "action.play";
            public static String PAUSE_ACTION = "action.pause";
            public static String NEXT_ACTION = "action.next";
            public static String CLOSE_ACTION = "action.close";
            public static String STARTFOREGROUND_ACTION = "action.startforeground";
            public static String STOPFOREGROUND_ACTION = "action.stopforeground";
        }
    
        public interface NOTIFICATION_ID {
            public static int FOREGROUND_SERVICE = 101;
        }
    }
    

提交回复
热议问题