2010-02-19 53 views
6

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

当我将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(); 

    } 

} 
+0

您可以发布错误吗?它会出现你正在关闭服务不正确:)但错误会告诉我们究竟是什么。 – Steve 2010-02-19 20:38:58

+0

看看我的答案你的重复帖子http://stackoverflow.com/questions/2298817/problem-with-my-android-service-please-help,看看是否有帮助 – snctln 2010-02-20 06:53:20

回答

0

onBind方法将返回null,只有当它是一个 “本地服务”。 如果我理解正确,您想创建远程服务。

显示this reference site.

5

player.stop();远程服务部分-----这行必须给你nullPointerException

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

0

你有选手对象声明的局部到的OnCreate程序,删除本地报关,见下图:

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

像写**里克·d **被宣布为媒体播放器,你已经宣布球员的问题之前,只需输入:

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