2013-10-25 3 views
0

Вместо того, чтобы создавать его в моем классе меню, я бы хотел создать глобальный внешний класс, который я могу вызвать, чтобы сохранить звук, независимо от того, какой вид деятельности запущен. Я noob для java, но я искал и не могу найти решение. Вот мое «меню». Как вы можете видеть, мой MediaPlayer snd является локальным, поэтому он приостанавливается при вызове метода onPause.Я хочу создать глобальный MediaPlayer, который будет продолжать играть независимо от того, какой макет отображается

public class Menu extends Activity{ 

MediaPlayer snd; 
ToggleButton btnSound; 

@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.menu); 
    snd = MediaPlayer.create(getApplicationContext(), R.raw.bgmusic); 
    snd.start(); 
    btnSound = (ToggleButton) findViewById(R.id.tglSound); 

@Override 
protected void onPause() { 
    super.onPause(); 
    snd.pause(); 
} 
+1

используйте услугу для этой цели. https://thenewcircle.com/s/post/60/servicesdemo_using_android_services – Raghunandan

+0

, используя услугу для этого – Lavanya

ответ

1

Ответ на ваш вопрос лежит в Android справки:

MediaPlayback

Если вы хотите, чтобы ваши средства массовой информации, чтобы играть в фоновом режиме, даже когда ваш приложение не экранная-то есть , вы хотите, чтобы он продолжал играть , пока пользователь взаимодействует с другими приложениями, тогда вы должны запустить службу и управлять экземпляром MediaPlayer. Вы должны следить за этой настройкой , потому что пользователь и система имеют ожидания относительно того, как приложение, работающее с фоном , должно взаимодействовать с остальной частью системы. Если ваше приложение не соответствует этим ожиданиям, у пользователя может быть плохой опыт . В этом разделе описываются основные проблемы, которые вы должны знать и предлагают предложения по их приближению.

0

Создание службы, как этот фрагмент кода:

public class whatEverYourServiceName extends Service{ 


@Override 
public void onStart(Intent intent, int startId){ 
super.onStart(intent, startId); 

//Add your code here mate 

} 


@Override 
public void onDestroy(){ 
super.onDestroy(); 

//Add what do you want to do here when the service is stop like do a backflip 
snd.pause(); 
} 

@Override 
public IBinder onBind(Intent arg0) { 

return null; 
} 

} 

Затем вызовите его с помощью этой

Intent it = new Intent(); 
it.setAction("your.package.name.whatEverYourServiceName"); 
startService(it); 

Затем добавьте в ваш манифест

<service 
    android:name="your.package.name.whatEverYourServiceName" 
    android:label="Your Service Homie" 
    android:process=":my_process" > 
    <intent-filter> 
     <action android:name="your.package.name.whatEverYourServiceName" > 
     </action> 
    </intent-filter> 
</service> 

Чтобы остановить звук просто остановите обслуживание, используя это

stopService(new Intent(this, whatEverYourServiceName.class)); 

Надеюсь, это поможет.

+0

Вместо службы я бы предпочел использовать глобальный MediaPlayer и ToggleButton. Я хочу узнать, проверен ли ToggleButton независимо от того, какой вид активности или содержимого я включен и проигрываю глобальный MediaPlayer. –

+1

Не используйте «глобальный MediaPlayer». Используйте Сервис. Сохраните значение кнопки Toggle в службе и либо привяжите службу к действию, если вам нужно получить доступ к ToggleButton или расширить медиаплеер, чтобы иметь дополнительное поле (и использовать его из вашей службы). Существует несколько способов решить эту проблему, используя «глобальный медиапланер», возможно, это худшая идея :) –

3

Лучший способ реализовать ваши требования - использовать сервис. Вы можете запустить службу, пока приложение будет включено. Внутри службы запустите медиапланер и начните играть. Таким образом, даже если вы переходите к следующим или другим мероприятиям, медиа будет продолжать играть. Вы также можете указать свойство услуги, чтобы начать рекламу. Истед о приостановке или остановке медиапланера вы можете просто прекратить службу, чтобы медитер также прекратил играть. Надеюсь, это link поможет вам наверняка.

Смежные вопросы