2012-04-21 3 views
0

私のAndroidアプリはバックグラウンドミュージックの再生に問題があるようです。どのように音楽を続けるのですか?

私は、アプリケーションを通して音楽を再生するためのコードを書いています... ボタンをクリックすると、新しい.classアクティビティに移動します。音楽は数秒後に遅れる....または最初から再起動しますか?

これは私のコードです:MusicService.java

public class MusicService extends Service implements 
    MediaPlayer.OnErrorListener { 

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

public MusicService() { 
} 

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(MusicService.this, R.raw.bgmusic); 
    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) { 
    Log.d("Moron Test", "Moron Test OnStart Length : " + length); 
    if(length == 0) 
    { 
     mPlayer.start(); 
    } 
    else 
    { 
     resumeMusic(); 
    } 
    return START_STICKY; 
} 


public void pauseMusic() { 
    if (mPlayer != null && mPlayer.isPlaying()) { 
     mPlayer.pause(); 
     length = mPlayer.getCurrentPosition(); 
    } 
    Log.d("Moron Test", "Moron Test pauseMusic Length : " + length); 
} 

public void resumeMusic() { 
    Log.d("Moron Test", "Moron Test resumeMusic Length : " + length); 
    if (mPlayer != null && mPlayer.isPlaying() == false) { 
     mPlayer.seekTo(length); 
     mPlayer.start(); 
    } 
    else 
    { 
     mPlayer.start(); 
    } 
} 

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

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (mPlayer != null) { 
     try { 
      pauseMusic(); 
      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; 
} 

}

と私の他のコード:私の通常のアプリすべてにWAEBaseActivity.java

public class WAEBaseActivity extends Activity { 
Intent svc; 
boolean isServiceStarted; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    isServiceStarted = false; 
} 
@Override 
protected void onResume() { 
    super.onResume(); 
    try { 
     if (Prefs.getMusic(this)) { 
      svc = new Intent(this, MusicService.class); 
      startService(svc); 
      isServiceStarted = true; 
     } 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    if(isServiceStarted) 
     stopService(svc); 

} 

}

。クラス私はこのコード行を持っています

public class Home extends WAEBaseActivity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    MusicService.length = 0; 

それはそれについてです。

ワヒドは

答えて

0

サービスのメインUIスレッド上で実行するすべてのあなたの助けのおかげで、あなたは、バックグラウンドで音楽を再生に対処するための別のスレッドを作成していないように見えます。新しいスレッドを作成してみてください。新しいスレッドが開始され、プレーヤーが起動します。私の推測は大いに役立つでしょう。

+0

私はこれを持ってプレイヤーを開始するための情報を得ています: public class Home extends WAEBaseActivity { – Wally

関連する問題