Страница 1 из 1
Background sound for game
Добавлено: 18 апр 2014, 01:23
Kirill Kirill
Привет всем, может есть линк на проект или совет. Нужен MediaPlayer сервис чтобы добавить бэкграунд звук в игру, а то на всех найденных мною сервисах при нажатии кнопки Home музыка продолжает играть. Такой вот баг выходит
Re: Background sound for game
Добавлено: 18 апр 2014, 08:38
altwin
Можно запустить в бекграунде пример с официального сайта 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.
Re: Background sound for game
Добавлено: 18 апр 2014, 10:26
Kirill Kirill
Вот проблема в том, что обработать нажатие HOME никак не выйдет. Так задумано системой Андроид вроде, чтобы пользователь всегда мог экстренно выйти из приложения. А то там получается можно будет заоверрайдить нажатие на НОМЕ и заставить пользователя вечно сидеть в приложениее
Re: Background sound for game
Добавлено: 18 апр 2014, 10:32
sergentum
по моему при нажатии хоме происходит стоп приложения. т.е. тот код который должен выполниться при нажатии хоме надо вставлять в онСтоп.
думаю это имел в виду предыдущий оратор.
Re: Background sound for game
Добавлено: 18 апр 2014, 10:45
altwin
Kirill Kirill писал(а):Вот проблема в том, что обработать нажатие HOME никак не выйдет. Так задумано системой Андроид вроде, чтобы пользователь всегда мог экстренно выйти из приложения. А то там получается можно будет заоверрайдить нажатие на НОМЕ и заставить пользователя вечно сидеть в приложениее
ну и что за бред это? я повторю при нажатии на Home срабатывает метод onStop(), что происходит далее?
http://developer.android.com/images/act ... ecycle.png
если вас что -то смущает, вы можете в onStop явно вызвать - finish();
НО зачем вам нужно переобпределять стандартное поведение onStop? это как бы странно по меньшей мере... вам нужно его дополнить. Переопределяя метод вы наследуете его поведение и дописываете что -то свое, менять его никто вас не заставляет.
P.S. по поводу Home в принципе:
KeyEvent.KEYCODE_HOME но это вам абсолютно не нужно....(
http://developer.android.com/intl/ru/re ... Event.html )
Re: Background sound for game
Добавлено: 18 апр 2014, 11:47
Kirill Kirill
Да все ваши ответы подходят для приложения с 1 экраном, если же их несколько не подходит
Re: Background sound for game
Добавлено: 18 апр 2014, 11:59
altwin
Kirill Kirill писал(а):Да все ваши ответы подходят для приложения с 1 экраном, если же их несколько не подходит
опять... а какая разница объясните в том сколько у вас экранов?
Re: Background sound for game
Добавлено: 18 апр 2014, 12:01
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() {
}
}
Re: Background sound for game
Добавлено: 18 апр 2014, 12:51
altwin
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() {
}
}
во-первых существует startForeground(), во-вторых что мешает оставить MainActivity в стеке?
И зачем что -то делать. если все уже сделанно очень давно?
MediaPlaybackActivity и
MediaPlaybackService
P.S. я по прежнему нифига не понимаю, что мешает добавить просто обработку нажатия -
KeyEvent.KEYCODE_HOME непосредственно в сервис и вырубать его? Одновременно делая запуск в onResume() методе активити???
Да в конце концов тупо убить сервис в методе onStop() каждой activity? Если вас смущает момент переключения активности - проверьте стек, если запуская новою там уже что -то есть - просто не вызывать метод(
http://developer.android.com/intl/ru/gu ... stack.html )
Повотрю вопрос - какая нафик разница сервису сколько активити в приложении?