【问题标题】:Music player in Android (emulator)Android中的音乐播放器(模拟器)
【发布时间】:2012-02-09 19:16:50
【问题描述】:

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

还有什么要添加到清单中的,我的代码或我的模拟器有问题吗? 谢谢!

【问题讨论】:

  • logcat 有什么错误吗?
  • 我认为我有一个与频道有关的错误 - 已损坏。有影响吗?

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


【解决方案1】:

我正在剪切我在 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 文件夹中。

【讨论】:

  • 并在您的 manifest.xml 中添加以下代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-29
  • 2014-04-13
  • 1970-01-01
相关资源
最近更新 更多