I have Implemented A media player But the Problem is that when i press back button .music stop.but it runs when the app is in background.
Proper approach is to implement media-player inside service. That way music playback will persist when users uses other applications or gets outside of your app.
Remember to call startForeground() with ongoing notification.
Related
I have an application which uses exoplayer to play videos.
When the user is on player page and presses the power button to close the screen I want the audio to keep playing in the background and notification should be visible to user with controls of play, pause , video metadata etc similar to what we have for every music playing app.
I can keep the audio of video playing from exoplayer using setPlayWhenReady(true).
But I am stuck in for notification. Should I be using MediaBrowserServiceCompat or I will have to create custom notification to handle it?
I think what you should do is to create ForegroundService and create notification as you mentioned to have the ForegroundService working. I think this post might help you:
https://androidwave.com/foreground-service-android-example/
Use a foreground service to implement something like this.This can help you
I want to start my app/service when another app get's active or music is played from that app. Is this possible with Android?
If You are specifically looking for starting your service when music player starts, take a look at AndroidManager API. You can register for callbacks using
registerAudioPlaybackCallback
Also there is method from same AudioManager which tells you if Music isActive
isActive - Stackoverflow
isMusicActive
I am able to play audio using exoplayer inside and Activity
My Activity that play the music. The activity also contains MediaSessionCompat.Callback that let for exemple notification to play that audio is available in this gist
and also using App Widget.
PendingIntent playPausePendingIntent = MediaButtonReceiver.buildMediaButtonPendingIntent(context,
PlaybackStateCompat.ACTION_PLAY_PAUSE);
views.setOnClickPendingIntent(R.id.btnPlay, playPausePendingIntent);
views.setImageViewResource(R.id.btnPlay, icon);
My problem is how can I play ongoing music inside an ImageButton when I leave the activity?
Please find image below.
Best practice for audio apps is having the player in a foreground services. This service runs independent from activities and hence the player survives when your activity is destroyed.
So to answer your question: your image button starts a foreground Service or sends a message to a service to play audi.
You may consider using a MediaBrowserService which is actually designed for this: https://developer.android.com/guide/topics/media-apps/audio-app/building-an-audio-app.html
The Anroid Universal Audio Player (UAMP) is a sample app which does just this: https://github.com/googlesamples/android-UniversalMusicPlayer/tree/master/mobile/src/main/java/com/example/android/uamp
Basing on this example: https://www.binpress.com/tutorial/using-android-media-style-notifications-with-media-session-controls/165
I've created a service which playing audio stream from URL with control buttons in notification - I can pause, resume and turn off streaming (by stopping service).
But how can I control this from activity, just like from notification? Of course I can send intents with proper action, but what I want is (for example):
I have opened activity from where I start service, music is playing and then I pull down a notification drawer, kicked pause for example, music is paused but activity is not aware about this
So there is my question - is there any possibility to access running Media Session or something like that from activity and control it just like from notification?
You need to bind your activity to your service, then add activity as listener to the player, and every time you start, pause ...etc report to your listener (activity). You will need to create your Interface to report such details to whoever wants to track the player's events.
Alternatively, you can use the new MediaSession compat libraries in the android support libraries found here:
https://developer.android.com/guide/topics/media-apps/index.html
They simplify the process of creating media controllers and establishing the transport control channels for wiring user interface components to media control service classes.
I am making an app in which I've made a Service which plays Music from URLs. The thing is that my music Service is playing music correctly BUT when user plays any song with Native music player then BOTH(Native Player and My Music Service) are playing music simultaneously. I want to stop My Music Service when user started playing music with native player.
Is there any Broadcast Intent which i can register to Detect the
music player is started?
Is it possible to detect Music player Started?
Any Other Solution?
Any suggestions would appreciated.
I'll suggest a different approach, that I believe it's the correct approach.
the issue on your approach is that you're suggesting to check for one specific app. And there're tons of different music players, plus radio players, plus video players, plus games... and all of those should stop your music in case they want to play something.
So how you do it?
It's all explained in the Android Developers website.
You have to register an OnAudioFocusChangeListener, so, whenever a different app request to have the audio focus, your app can stop the music.
Step 1: Detect if the user has opened native music app. For this , you need to know the package name of your native music app.
Then refer to my answer here: Android how to know an app has been started and range apps priority according the starting times
Using that , the list taskinfo will have the list of all running activities, and as explained there, the first element of the list will be the activity in the foreground.
STEP 2: Once you detect native music app being activated using STEP 1 (by polling for it in the background) , then stop your app's service.
NOTE: You should do this in a background (using asynctask) or another service.
NOTE 2: The limitation of this method is that you can't actually stop the music player when the user clicks play in the native music app, since this method will help you detect only if the native music app is opened or not.