Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
kozak95
34 / 34 / 10
Регистрация: 01.11.2013
Сообщений: 319
#1

MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? - Android

21.08.2016, 17:31. Просмотров 435. Ответов 22
Метки нет (Все метки)

Как продолжить работу ауди плеера в фоновом режиме? Сервис создал, но что туда надо передать? Весь код выполняется в Activity.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2016, 17:31     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме?
Посмотрите здесь:

Как записать аудио с микрофона и воспроизвести? Android
Как отследить момент окончания аудио в SoundPool? Android
Android MediaPlayer, как программно задать определенный файл на воспроизведение?
Съёмка в фоновом режиме Android
Android Переходы по ссылка в фоновом режиме?
Как записать аудио поток в файл Android
Android Как остановить по отдельности каждую мелодию в MediaPlayer?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 837
21.08.2016, 18:52     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #2
kozak95, выложи код
kozak95
34 / 34 / 10
Регистрация: 01.11.2013
Сообщений: 319
21.08.2016, 19:38  [ТС]     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #3
Та кода много...хочу чтоб подсказали сам алгоритм как это реализовать, ведь все в Activity выполняется.
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,928
21.08.2016, 20:05     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #4
kozak95, отдай туда ссылку на плеер.
kozak95
34 / 34 / 10
Регистрация: 01.11.2013
Сообщений: 319
21.08.2016, 20:34  [ТС]     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #5
vxg, А c помощью чего отдать ссылку туда? через intent не получается.
Java
1
startService(new Intent(this,AudioService.class).putExtra("player",mediaPlayer));
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 837
21.08.2016, 23:18     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #6
kozak95, перенеси код из активити в сервис
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,928
22.08.2016, 09:20     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #7
kozak95, вот так
Цитата Сообщение от danek130995 Посмотреть сообщение
перенеси код из активити в сервис
kozak95
34 / 34 / 10
Регистрация: 01.11.2013
Сообщений: 319
22.08.2016, 09:39  [ТС]     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #8
А по другому никак нельзя?
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,928
22.08.2016, 09:57     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #9
kozak95, унаследуйте от Application и храните ссылку на плеер в его статике. при паузе активити не освобождайте плеер. если параллельно работает сервис система не станет выгружать приложение и плеер должен продолжать играть.
kozak95
34 / 34 / 10
Регистрация: 01.11.2013
Сообщений: 319
22.08.2016, 10:52  [ТС]     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #10
vxg, А если я перенесу код в сервис, то в activity должен же выполнятся прогресс: двигаться ползунок в seekBar, идти время композиции и т.д. То есть тогда сервис должен постоянно передавать эту информацию в activity, а activity давать команды сервису что запустить на проигрывание. С помощью чего тогда организовать эту двухстороннюю связь?
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,928
22.08.2016, 10:54     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #11
kozak95, думаю следует начать с того как вы двигаете ползунок и показываете время. ссылке в Application сам сервис как таковой не нужен - он нужен просто для того что бы приложение не было закрыто системой после сворачивания активити
kozak95
34 / 34 / 10
Регистрация: 01.11.2013
Сообщений: 319
22.08.2016, 11:02  [ТС]     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #12
vxg, через Handler
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    private Runnable moveSeekBarThread = new Runnable() {
        public void run() {
            if(mediaPlayer.isPlaying()){
 
                int mediaPos_new = mediaPlayer.getCurrentPosition();
                int mediaMax_new = mediaPlayer.getDuration();
                seekbar.setMax(mediaMax_new);
                seekbar.setProgress(mediaPos_new);
                tvDurationCurrent.setText((millsecToSec(String.valueOf(mediaMax_new))));
                tvDurationEnd.setText((millsecToSec(String.valueOf(mediaPos_new))));
                handler.postDelayed(this, 100);
            }
 
        }
    };
REALIST07
Автор FAQ
Автор FAQ
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
22.08.2016, 11:05     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #13
Сделайте как в моем посте,я думаю для вас это подойдет, так как у меня также сервис постоянно висит в фоне
vxg
Модератор
3024 / 1826 / 190
Регистрация: 13.01.2012
Сообщений: 6,928
22.08.2016, 11:08     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #14
kozak95, в onPause убивать хандлер обновляющий прогресс, в OnResume создавать снова.
kozak95
34 / 34 / 10
Регистрация: 01.11.2013
Сообщений: 319
22.08.2016, 11:52  [ТС]     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #15
Цитата Сообщение от REALIST07 Посмотреть сообщение
Сделайте как в моем посте
REALIST07, Пока не сильно еще разобрался как это работает...ну я с могу с помощью той структуры передавать постоянно вот эти значения
Цитата Сообщение от kozak95 Посмотреть сообщение
int mediaPos_new = mediaPlayer.getCurrentPosition();
int mediaMax_new = mediaPlayer.getDuration();
в MainActivity, чтобы там постоянно обновлялось seekBar и время тикало?
REALIST07
Автор FAQ
Автор FAQ
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
22.08.2016, 12:05     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #16
kozak95, без проблем,c Handlerom передавай в sendBroadcastReceiver
kozak95
34 / 34 / 10
Регистрация: 01.11.2013
Сообщений: 319
22.08.2016, 12:33  [ТС]     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #17
REALIST07, Подскажите, во такой код создания объекта Handler нужен, чтоб он выполнялся в отдельном потоке, правильно?
Цитата Сообщение от REALIST07 Посмотреть сообщение
HandlerThread mThread = new HandlerThread("ServiceThread",
android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
mThread.start();
mHandler = new Handler(mThread.getLooper(), this);
REALIST07
Автор FAQ
Автор FAQ
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
22.08.2016, 12:41     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #18
Да, такой
kozak95
34 / 34 / 10
Регистрация: 01.11.2013
Сообщений: 319
22.08.2016, 15:11  [ТС]     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #19
REALIST07, Сделал следующим образом:
С активити стартую сервис, соответсвено вызывается OnCommandStart:
Java
1
2
3
4
5
6
7
8
9
10
11
12
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        int method = 0;
 
        if (intent != null) {
            method = intent.getIntExtra("action", -1);
            path = intent.getStringExtra("path");
        }
        mHandler.sendMessage(mHandler.obtainMessage(method, intent));
 
        return START_STICKY;
    }
В сервис номер действия которое выполнится - это у меня запуск плеера: там я вызываю App.sendLocalBroadcastMessage и передаю текущее время композиции и общее
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    @Override
    public boolean handleMessage(Message msg) {
        int method = msg.what;
 
            switch (method) {
                case 0:
                    //Intent intent = (Intent) msg.obj;
                    try {
                        mediaPlayer.setDataSource(path);
                        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                        mediaPlayer.prepare();
                        mediaPlayer.start();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    App.sendLocalBroadcastMessage("MyAction", mediaPlayer.getCurrentPosition(),mediaPlayer.getDuration());
                break;
            }
        return false;
    }
sendLocalBroadcastMessage выглядит вот так:
Java
1
2
3
4
5
6
    public static boolean sendLocalBroadcastMessage(String action,int result1, int result2) {
        Intent sendIntent = new Intent();
        sendIntent.putExtra("mediaPos_new",result1);
        sendIntent.putExtra("mediaMax_new",result2);
        return LocalBroadcastManager.getInstance(context).sendBroadcast(sendIntent);
    }
Ну и в активити принимаю:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
        IntentFilter intentfilter= new IntentFilter();
        intentfilter.addAction("MyAction");
        LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                int mediaPos_new = intent.getIntExtra("mediaPos_new", -1);
                int mediaMax_new = intent.getIntExtra("mediaMax_new",-1);
                seekbar.setMax(mediaMax_new);
                seekbar.setProgress(mediaPos_new);
                tvDurationCurrent.setText((millsecToSec(String.valueOf(mediaMax_new))));
                tvDurationEnd.setText((millsecToSec(String.valueOf(mediaPos_new))));
            }
        },intentfilter);
Но приложение падает с NullPointer. Что неправильно делаю?

Добавлено через 33 минуты
С NullPointer решил проблему, но как постоянно передавать эти сообщения на активити?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2016, 15:22     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме?
Еще ссылки по теме:

Android MediaPlayer автореверс
Съемка камерой в фоновом режиме Android
Android Ошибка MediaPlayer'a
Android Как получить стерео-звук с выхода аудио-микшера или музыкальный поток?
Как записать потоковое аудио из интернета Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Mikalai
254 / 230 / 93
Регистрация: 11.01.2015
Сообщений: 649
22.08.2016, 15:22     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме? #20
kozak95, Привязанные службы.
Цитата от туда - "Этот вариант подходит только в том случае, если клиент и служба выполняются внутри одного приложения и процесса, что является наиболее распространенной ситуацией. Например, расширение класса отлично подойдет для музыкального приложения, в котором необходимо привязать операцию к собственной службе приложения, которая воспроизводит музыку в фоновом режиме."
Yandex
Объявления
22.08.2016, 15:22     MediaPlayer: как продолжить работу аудио-плеера в фоновом режиме?
Ответ Создать тему
Опции темы

Текущее время: 11:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru