6

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

当我在启动和销毁服务时告诉 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

4 回答 4

6

player.stop();-----这条线一定是给你nullPointerException的。

private MediaPlayer player;在这里您只创建参考。但是您在其中创建的对象仅onCreate()具有本地范围。请创建一个具有类级别范围的对象,然后它将起作用。

于 2012-09-03T08:32:04.970 回答
0

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

在此参考站点中显示远程服务部分。

于 2011-10-11T02:28:00.137 回答
0

您将播放器对象声明为 OnCreate 过程的本地,删除本地声明,见下文:

//MediaPlayer player = MediaPlayer.create(MyService.this, R.raw.my_music);
player = MediaPlayer.create(MyService.this, R.raw.my_music);
于 2016-04-09T12:52:34.630 回答
0

就像写的 ** Rick D** 一样,问题是在 Mediaplayer 中声明的,您之前已经声明了播放器,只需输入:

player = MediaPlayer.create(ForegroundService.this, R.raw.my_music);
于 2017-09-11T18:39:14.693 回答