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 でのバックグラウンド ミュージックの再生でコードをせん断しています。それはあなたの問題を解決します。

最初の 1 つは MainActivity で、2 番目のクラスは MyService です。

MainActivity コードは

public class MainActivity extends Activity implement 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 コードは

public class MyService extends 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」フォルダーに「生の」フォルダーを作成する必要があります。

于 2013-12-30T11:36:57.957 に答える