Android中的音乐播放器(模拟器)

时间:2012-02-09 19:16:50

标签: android service audio-player android-music-player

我在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;
}
}

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

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

是否有其他东西可以添加到Manifest,我的代码或我的模拟器有问题吗? 谢谢!

1 个答案:

答案 0 :(得分: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扩展了Service {

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”文件夹,而不是将音乐文件粘贴到该原始文件夹中。