1

我在Android上做了一个背景音乐播放的小模拟,但它不起作用......有代码:

[我的活动,在 onCreate]

Intent music = new Intent(this, MusicService.class);
startService(music);

[还有 MusicService 类]

public class MusicService extends Service  implements MediaPlayer.OnErrorListener {

private final IBinder mBinder = new ServiceBinder();
MediaPlayer mPlayer;
private int length = 0;

public class ServiceBinder extends Binder {
     MusicService getService()
     {
        return MusicService.this;
     }
}

@Override
public IBinder onBind(Intent arg0){
    return mBinder;
}

@Override
public void onCreate () {

  super.onCreate();
  mPlayer = MediaPlayer.create(this, R.raw.song1);
  mPlayer.setOnErrorListener(this);

  if(mPlayer!= null)
  {
    mPlayer.setLooping(true);
    mPlayer.setVolume(100,100);
  }


  mPlayer.setOnErrorListener(new OnErrorListener() {

      public boolean onError(MediaPlayer mp, int what, int extra){

          onError(mPlayer, what, extra);
          return true;
      }
  });
}

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

public void pauseMusic()
{
    if(mPlayer.isPlaying())
    {
        mPlayer.pause();
        length=mPlayer.getCurrentPosition();
    }
}

public void resumeMusic()
{
    if(mPlayer.isPlaying()==false)
    {
        mPlayer.seekTo(length);
        mPlayer.start();
    }
}

public void stopMusic()
{
    mPlayer.stop();
    mPlayer.release();
    mPlayer = null;
}

@Override
public void onDestroy ()
{
    super.onDestroy();
    if(mPlayer != null)
    {
        try{
            mPlayer.stop();
            mPlayer.release();
        }
        finally {
            mPlayer = null;
        }
    }
}

public boolean onError(MediaPlayer mp, int what, int extra) {

    Toast.makeText(this, "music player failed", Toast.LENGTH_SHORT).show();
    if(mPlayer != null)
    {
        try{
            mPlayer.stop();
            mPlayer.release();
        }
        finally {
            mPlayer = null;
        }
    }
    return false;
}
}

我在模拟器中听不到任何歌曲。我确实完成了这样的清单文件:

<service 
    android:name="MusicService"
    android:enabled="true">
</service>

清单中是否还有其他内容要添加,我的代码或我的模拟器有问题吗?谢谢!

4

1 回答 1

0

我正在剪切我在 Android 上播放背景音乐的代码。它将解决您的问题。

我头创建了两个类,第一个是 MainActivity,第二个是 MyService。

MainActivity 代码是

公共类 MainActivity 扩展 Activity 实现 OnClickListener {

private static final String TAG = "MainActivity";
Button play, stop;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    play = (Button) findViewById(R.id.play);
    stop = (Button) findViewById(R.id.stop);

    play.setOnClickListener(this);
    stop.setOnClickListener(this);

}

@Override
public void onClick(View src) {

    switch (src.getId()) {
    case R.id.play:
        Log.d(TAG, "onClick: starting srvice");
        startService(new Intent(this, MyService.class));
        break;
    case R.id.stop:
        Log.d(TAG, "onClick: stopping srvice");
        stopService(new Intent(this, MyService.class));
        break;
    }
}

}

现在 MyService 代码是

公共类 MyService 扩展服务 {

private static final String TAG = "MyService";
MediaPlayer player;

@Override
public IBinder onBind(Intent intent) {

    return null;
}

@Override
public void onCreate() {
    Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
    Log.d(TAG, "onCreate");

    player = MediaPlayer.create(this, R.raw.braincandy);
    player.setLooping(false); // Set looping
}

@Override
public void onDestroy() {
    Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
    Log.d(TAG, "onDestroy");
    player.stop();
}

@Override
public void onStart(Intent intent, int startid) {
    Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
    Log.d(TAG, "onStart");
    player.start();
}

}

您必须在“res”文件夹中创建一个“raw”文件夹,而不是将您的音乐文件粘贴到该 raw 文件夹中。

于 2013-12-30T11:36:57.957 回答