Background sound for game
-
Kirill Kirill
- Сообщения: 17
- Зарегистрирован: 30 мар 2014, 15:55
Background sound for game
Привет всем, может есть линк на проект или совет. Нужен MediaPlayer сервис чтобы добавить бэкграунд звук в игру, а то на всех найденных мною сервисах при нажатии кнопки Home музыка продолжает играть. Такой вот баг выходит
Re: Background sound for game
Можно запустить в бекграунде пример с официального сайта android developer:
[syntax=java5]
Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();[/syntax]
http://developer.android.com/intl/ru/gu ... layer.html
И добавить обработчик onStop(), срабатывающий при нажатии Home.
[syntax=java5]
Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();[/syntax]
http://developer.android.com/intl/ru/gu ... layer.html
И добавить обработчик onStop(), срабатывающий при нажатии Home.

-
Kirill Kirill
- Сообщения: 17
- Зарегистрирован: 30 мар 2014, 15:55
Re: Background sound for game
Вот проблема в том, что обработать нажатие HOME никак не выйдет. Так задумано системой Андроид вроде, чтобы пользователь всегда мог экстренно выйти из приложения. А то там получается можно будет заоверрайдить нажатие на НОМЕ и заставить пользователя вечно сидеть в приложениее
Re: Background sound for game
по моему при нажатии хоме происходит стоп приложения. т.е. тот код который должен выполниться при нажатии хоме надо вставлять в онСтоп.
думаю это имел в виду предыдущий оратор.
думаю это имел в виду предыдущий оратор.
Re: Background sound for game
ну и что за бред это? я повторю при нажатии на Home срабатывает метод onStop(), что происходит далее? http://developer.android.com/images/act ... ecycle.pngKirill Kirill писал(а):Вот проблема в том, что обработать нажатие HOME никак не выйдет. Так задумано системой Андроид вроде, чтобы пользователь всегда мог экстренно выйти из приложения. А то там получается можно будет заоверрайдить нажатие на НОМЕ и заставить пользователя вечно сидеть в приложениее
если вас что -то смущает, вы можете в onStop явно вызвать - finish();
НО зачем вам нужно переобпределять стандартное поведение onStop? это как бы странно по меньшей мере... вам нужно его дополнить. Переопределяя метод вы наследуете его поведение и дописываете что -то свое, менять его никто вас не заставляет.
P.S. по поводу Home в принципе: KeyEvent.KEYCODE_HOME но это вам абсолютно не нужно....( http://developer.android.com/intl/ru/re ... Event.html )

-
Kirill Kirill
- Сообщения: 17
- Зарегистрирован: 30 мар 2014, 15:55
Re: Background sound for game
Да все ваши ответы подходят для приложения с 1 экраном, если же их несколько не подходит
Re: Background sound for game
опять... а какая разница объясните в том сколько у вас экранов?Kirill Kirill писал(а):Да все ваши ответы подходят для приложения с 1 экраном, если же их несколько не подходит

-
Kirill Kirill
- Сообщения: 17
- Зарегистрирован: 30 мар 2014, 15:55
Re: Background sound for game
Вот пример сервиса. Попробуй сделать любое прилоджение с 2 экранами, чтобы музыка в них работала не прерываясь переходя из экрана на экран и при нажатии НОМЕ переставала играть
Код: Выделить всё
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
public class BackgroundSoundService extends Service {
MediaPlayer player;
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
player = MediaPlayer.create(this, R.raw.idil);
player.setLooping(true); // Set looping
player.setVolume(70,70);
}
public int onStartCommand(Intent intent, int flags, int startId) {
player.start();
return 1;
}
public void onStart(Intent intent, int startId) {
// TO DO
}
public IBinder onUnBind(Intent arg0) {
// TO DO Auto-generated method
return null;
}
public void onStop() {
}
public void onPause() {
}
@Override
public void onDestroy() {
player.stop();
player.release();
}
@Override
public void onLowMemory() {
}
}Re: Background sound for game
во-первых существует startForeground(), во-вторых что мешает оставить MainActivity в стеке?Kirill Kirill писал(а):Вот пример сервиса. Попробуй сделать любое прилоджение с 2 экранами, чтобы музыка в них работала не прерываясь переходя из экрана на экран и при нажатии НОМЕ переставала играть
Код: Выделить всё
import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.IBinder; public class BackgroundSoundService extends Service { MediaPlayer player; public IBinder onBind(Intent arg0) { return null; } @Override public void onCreate() { super.onCreate(); player = MediaPlayer.create(this, R.raw.idil); player.setLooping(true); // Set looping player.setVolume(70,70); } public int onStartCommand(Intent intent, int flags, int startId) { player.start(); return 1; } public void onStart(Intent intent, int startId) { // TO DO } public IBinder onUnBind(Intent arg0) { // TO DO Auto-generated method return null; } public void onStop() { } public void onPause() { } @Override public void onDestroy() { player.stop(); player.release(); } @Override public void onLowMemory() { } }
И зачем что -то делать. если все уже сделанно очень давно?
MediaPlaybackActivity и MediaPlaybackService
P.S. я по прежнему нифига не понимаю, что мешает добавить просто обработку нажатия - KeyEvent.KEYCODE_HOME непосредственно в сервис и вырубать его? Одновременно делая запуск в onResume() методе активити???
Да в конце концов тупо убить сервис в методе onStop() каждой activity? Если вас смущает момент переключения активности - проверьте стек, если запуская новою там уже что -то есть - просто не вызывать метод( http://developer.android.com/intl/ru/gu ... stack.html )
Повотрю вопрос - какая нафик разница сервису сколько активити в приложении?
