Zankhna
Zankhna

Reputation: 4563

MediaPlayer Service Android

I am new to Android. I am creating service for Media Player so that it can continue to play song even if i close the application. I have created activity for Media Player and it is having all the functionality like play , pause , next , previous , seekbar and also includes oncompletionlistener . All works excellent. But Now i want that all should be managed by service.

I have Created MyService Class :

public class MyService extends Service {

    public static MediaPlayer mp;

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        mp = new MediaPlayer();     
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {  
        return START_STICKY;
    }

But in my player activity i have created ArrayList for Songlist from which i am taking currentsongIndex and through it i am maintaining all the functionality like next , previous and all.. Now in service how do i get songlist which is also required in my activity ?? Where should i create MediaPlayer object mean in service or activity ??

for MediaPlayer I have reffered http://www.androidhive.info/2012/03/android-building-audio-player-tutorial/ . For my media player code you can refer this site. Thanks. Pleaze clear my doubt. I am so confused. Reply me soon..

Upvotes: 15

Views: 28888

Answers (3)

Delton
Delton

Reputation: 46

I went through exactly the same thing! It's a long haul to develop even a really great mp3 player app. The answer is long.

Here are a few resources that really helped me. Android has a article on this very thing in their developer docs:

http://developer.android.com/guide/components/services.html

Pay attention to what it says at the bottom of this long article about bound services and running in the foreground.

Additionally, managing player state is what caused me the most headaches.

You'll also want to take a look at threading because spawning that new service will still execute everything on the Main UI Thread, sounds crazy but true. Take a look at the ExecutorService for managing thread pools. I wish I could tell you it was easier.

Unfortunately most of my formal training from all over the web but with android services comes from a paid site:

http://www.pluralsight.com/training/Courses/TableOfContents/android-services

It is a good resource for all programmers I think but has great sections about many aspects of android programming that are only covered briefly at other tutorial sites.

The resources at Vogella are good also, mentioned above.

Upvotes: 0

midiwriter
midiwriter

Reputation: 426

You are on the right track. I have adapted from the SDK Samples; this is how I do it and it works great. From your ArrayList (in your activity NOT from the Service) call

onListItemClick

and start an intent that starts the music service:

startService(new Intent(MusicService.ACTION_PLAY));

In your manifest you will need to add:

 <intent-filter>
            <action android:name="com.blah.blah.action.PLAY" />
           <xxx xxx> 
 </intent-filter>

And of course in your Music Service you need to receive the Intent:

public int onStartCommand(Intent intent, int flags, int startId) {
    String action = intent.getAction();
    if (action.equals(ACTION_PLAY))
        processPlayRequest();
  }

Be sure to add Intents for skip, rewind, stop etc. Let me know if this helps.

Upvotes: 8

Rahul Bisht
Rahul Bisht

Reputation: 492

Getting the app to run in background should be taken care of by the 'Service' itself.
Try following this example http://www.vogella.com/articles/AndroidServices/article.html
A service is designed to work in the background.

Upvotes: 2

Related Questions