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

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

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

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

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

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

Скриншот в фоновом режиме - Программирование Android
Цель - создание приложения, работающего в фоне и делающего снимок всего экрана с любой текущей активной задачей пользователя, а не моего...

Съёмка в фоновом режиме - Программирование Android
Как получить картинку с камеры в фоновом режиме (без Surface)? Неважно, на Java или в native, главное, чтобы это работало на старых...

Переходы по ссылка в фоновом режиме? - Программирование Android
Здравствуйте. Как можно реализовать автоматический переход по ссылкам в WebView? Т.е. хочу сделать так, что бы в фоновом режиме у меня...

Съемка камерой в фоновом режиме - Программирование Android
Здравствуйте! Я сделал тестовое приложение, которое через определенный интервал (например, полчаса) делает снимок с помощью...

Остановка аудио плеера при клике на другой аудио плеер - jQuery
Всем привет. На сайт добавил такой вот плеерочек. На странице стоит много таких плееров и нужно, чтобы при клике на один из них предыдущий...

как выполнить system() в фоновом режиме - C++
есть system("start .\hl2.exe -game cstrike") проблема в том что когда запускаю программу промелькивает dos окно ну а потом запускается сама...

22
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 934
22.08.2016, 12:05 #16
kozak95, без проблем,c Handlerom передавай в sendBroadcastReceiver
0
kozak95
34 / 34 / 10
Регистрация: 01.11.2013
Сообщений: 319
22.08.2016, 12:33  [ТС] #17
REALIST07, Подскажите, во такой код создания объекта Handler нужен, чтоб он выполнялся в отдельном потоке, правильно?
Цитата Сообщение от REALIST07 Посмотреть сообщение
HandlerThread mThread = new HandlerThread("ServiceThread",
android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
mThread.start();
mHandler = new Handler(mThread.getLooper(), this);
0
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 934
22.08.2016, 12:41 #18
Да, такой
0
kozak95
34 / 34 / 10
Регистрация: 01.11.2013
Сообщений: 319
22.08.2016, 15:11  [ТС] #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 решил проблему, но как постоянно передавать эти сообщения на активити?
0
Mikalai
259 / 235 / 95
Регистрация: 11.01.2015
Сообщений: 662
22.08.2016, 15:22 #20
kozak95, Привязанные службы.
Цитата от туда - "Этот вариант подходит только в том случае, если клиент и служба выполняются внутри одного приложения и процесса, что является наиболее распространенной ситуацией. Например, расширение класса отлично подойдет для музыкального приложения, в котором необходимо привязать операцию к собственной службе приложения, которая воспроизводит музыку в фоновом режиме."
0
kozak95
34 / 34 / 10
Регистрация: 01.11.2013
Сообщений: 319
22.08.2016, 22:40  [ТС] #21
И еще, в MainActivity у меня BroadCastReceiver, который получает информацию от сервиса, но когда я передаю информацию сервису c активити(например пользователь нажал паузу и нужно приостановить проигрыватель) хорошая ли эта практика в каждом таком случае делать startService и передавать туда intent с extra каким-то?
0
vxg
Модератор
3172 / 1975 / 222
Регистрация: 13.01.2012
Сообщений: 7,612
23.08.2016, 08:17 #22
kozak95, при полностью разделённых сервисе и приложении старт это нормальный способ. Реально он приводит к вызову OnStartCommand если конечно сервис не остановлен
1
REALIST07
Автор FAQ
Автор FAQ
176 / 176 / 13
Регистрация: 11.06.2010
Сообщений: 934
23.08.2016, 11:42 #23
kozak95, уже больше года использую, проблем нет, только вам нужно грамотно еще прописать действия на закрытие или остановки сервиса, в моем случае это рестарт сервиса и сохранение нужных объектов

Добавлено через 12 минут
kozak95, а вообще как бы я подошел к такому проекту, я бы поискал по гитхабу проект похожий и посмотрел бы как там реализовано или разобрал бы плеер, который мне самому нравится и посмотрел бы что там внутри ( не воруя!)
0
23.08.2016, 11:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2016, 11:42
Привет! Вот еще темы с ответами:

Как сделать приложение в фоновом режиме - C++ Builder
Я хочу сделать достаточно объемную программу, но хочу сделать ее в фоновом режиме. То есть работать она будет постоянно, но на панели задач...

Как запустить приложение в фоновом режиме? - C++ Builder FireMonkey
Как запустить приложение в фоновом режиме? Слышал что-то про сервис, на Java нашел, на FireMonkey гугл перерыл ничего не нашел.

Работа в фоновом режиме, как сделать? - C++
#include <winsock2.h> char sbuf="\0",sbuf2="\0"; STARTUPINFO si; PROCESS_INFORMATION pi; int APIENTRY...

Как запустить процесс в фоновом режиме? - Ubuntu Linux
Я знаю как отобразить процессы, а вот запуск процесса yes в фоновом режиме, нет. :wall::help:


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Опции темы

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