ChaluxeDeluxe
ChaluxeDeluxe

Reputation: 81

Android Service controlling MediaPlayer

All I want to do is simply control background music in my app through a service so I am able to start it and stop it from any activity.

I have everything set up perfectly when I tell the service to Toast when it is started and destroyed but as soon as I put the media playin in there instead It starts fine and starts playing the music but as soon as a click a button to stop the service I get an error and a force close.

PLEASE someone help me see what I am doing wrong.. I am pretty new to android developing I'm guessing it's going to be something easy.

Here is my code:

import android.app.Service;

import android.content.Intent;

import android.media.MediaPlayer;

import android.os.IBinder;

import android.widget.Toast;

public class MyService extends Service {

    private MediaPlayer player;

    @Override
    public IBinder onBind(Intent intent) {

        return null;

    }

    @Override
    public void onCreate() {

        super.onCreate();

        Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();

        MediaPlayer player = MediaPlayer.create(MyService.this, R.raw.my_music);

        player.start();

        player.setLooping(true);

    }

    @Override
    public void onDestroy() {

        super.onDestroy();

        player.stop();

        Toast.makeText(this, "Service Stopped", Toast.LENGTH_SHORT).show();

    }

}

Upvotes: 6

Views: 11214

Answers (4)

Felipe Peña
Felipe Peña

Reputation: 15

Like wrote ** Rick D** the problem was declared in Mediaplayer you've declared player before, just put:

player = MediaPlayer.create(ForegroundService.this, R.raw.my_music);

Upvotes: 0

Rick D
Rick D

Reputation: 1

You have the player object declared local to the OnCreate Procedure, remove the local declaration, see below:

//MediaPlayer player = MediaPlayer.create(MyService.this, R.raw.my_music);
player = MediaPlayer.create(MyService.this, R.raw.my_music);

Upvotes: 0

IvoryCirrus
IvoryCirrus

Reputation: 622

onBind method returns null only if it is a "Local Service". If I understand you correctly, you want to create remote service.

show the remote service section in this reference site.

Upvotes: 0

Ritesh Gune
Ritesh Gune

Reputation: 16729

player.stop();----- this line must be giving you nullPointerException.

private MediaPlayer player; here you are creating only reference.But object you are creating in onCreate() has local scope only. Please create an object having class level scope, then it will work.

Upvotes: 6

Related Questions