Android服务控制MediaPlayer

时间:2010-02-19 19:19:46

标签: android service media-player

我想做的只是通过服务在我的应用中控制背景音乐,这样我就可以启动它并停止任何活动。

当我将Toast的服务告诉Toast时,我已经完成了所有设置,但是只要我将媒体播放到那里而不是它开始正常并开始播放音乐但是只要点击一下按钮就可以停止服务我得到一个错误和一个力量关闭。

请有人帮我看看我做错了什么..我对Android开发很新,我猜它会变得容易。

这是我的代码:

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();

    }

}

4 个答案:

答案 0 :(得分:5)

player.stop(); -----此行必须为您提供nullPointerException

private MediaPlayer player;这里只创建reference.But在onCreate()创建的对象只有本地范围。请创建一个具有类级别范围的对象,然后它将起作用。

答案 1 :(得分:0)

仅当

onBind方法是“本地服务”时,它才返回null。 如果我理解正确,您需要创建远程服务。

this reference site.

中显示远程服务部分

答案 2 :(得分:0)

你将玩家对象声明为OnCreate过程的本地,删除本地声明,见下文:

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

答案 3 :(得分:0)

喜欢写了** Rick D **问题是在媒体播放器中声明的,你之前宣布了玩家,只是放了:

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