2015-05-19 3 views
1

Я много искал фоновой музыки и до сих пор не нашел ничего, что действительно работало так, как я хотел. Большинство примеров не остановят фоновая музыка приложения, если вы нажмете кнопку HOME.Фоновая музыка либо останавливается, либо всегда перезапускается

Тогда я нашел этот пример: http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion

Я переоформлена код к моим потребностям, нужно только музыку, которая проходит через все виды деятельности, даже если вернуться к предыдущей деятельности и останавливается, как только вы нажмете кнопку HOME.

Это мой код:

public class MusicManager { 
private static final String TAG = "MusicManager"; 

private static MediaPlayer mp; 

private static int currentMusic = 0; 

public static void start(Context context, int music) { 
    start(context, music, false); 
    } 

public static void start(Context context, int music, boolean force) { 

    if (!force && currentMusic > 0) { 
     // already playing some music and not forced to change 
     return; 
    } 

    currentMusic = 1; 
    mp = MediaPlayer.create(context, music); 
    if (mp != null) { 
     if (!mp.isPlaying()) { 

      mp.setVolume(100, 100); 
      mp.setLooping(true); 
      mp.start(); 
     } 
    } 

} 

public static void pause() { 

    if (mp.isPlaying()) { 
     mp.pause(); 
    } 
} 

public static void release() { 
    Log.d(TAG, "Releasing media players"); 
    try { 
     if (mp != null) { 
      if (mp.isPlaying()) { 
       mp.stop(); 
      } 
      mp.release(); 
     } 
    } catch (Exception e) { 
     Log.e(TAG, e.getMessage(), e); 
    } 
} 

Затем я использую для каждого вида деятельности, я хочу, чтобы музыка продолжать играть в:

private static boolean continueMusic = true // field boolean 

    @Override 
protected void onPause() { 
    super.onPause(); 
    if (!continueMusic) { 
     MusicManager.pause(); 
    } 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    continueMusic = false; 
    MusicManager.start(this, R.raw.musica); 
} 

@Override 
public boolean onKeyDown(int keycode, KeyEvent e){ 
    if(keycode == KeyEvent.KEYCODE_BACK){ 
     continueMusic = true; 
    } 
    return true; 
} 

Теперь, с этим кодом моя музыка работает только в главном (уведомление я не называю onKeyDown в mainactivity, как объяснено в ссылке, которую я дал), если я удалю следующий код из класса MusicManager:

if (!force && currentMusic > 0) { 
     // already playing some music and not forced to change 
     return; 
    } 

Музыка возобновляется в каждом действии. Любые идеи о том, что не так?

ответ

0

Я не совсем уверен в этом, и я не могу проверить его на данный момент. Но я думаю, что проблема связана с вашим контекстом. Попробуйте дать игроку такой контекст приложения, как этот:

context.getApplicationContext(); 
Смежные вопросы