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
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;
}
}