Страница 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 )

Повотрю вопрос - какая нафик разница сервису сколько активити в приложении?