С Новым годом! Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
3 / 3 / 2
Регистрация: 30.09.2014
Сообщений: 50

Как заставить работать BroadcastReceiver?

30.09.2014, 13:28. Показов 3701. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Собственно идея: есть стандартный плеер телефона(HTC One m7 Android 4.4.3) и проводная гарнитура с одной кнопкой. Но по нажатию на эту самую кнопку можно только делать плей\пауз и все! Хочу расширить функционал однокнопочной гарнитуры. Задача вроде как тривиальная, но столкнулся с проблемой, ресивер не слушает нажатие кнопки.
Код манифеста:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.receivertest"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
        <receiver android:name=".MyBroadcastReceiver" >
            <intent-filter android:priority="2147483647" >
                <action android:name="android.intent.action.MEDIA_BUTTON" />
            </intent-filter>
        </receiver>
    </application>
 
</manifest>
Код Ресивера:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.example.receivertest;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
 
public class MyBroadcastReceiver extends BroadcastReceiver {
    public MyBroadcastReceiver() {
        super();
    }
 
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals(Intent.ACTION_HEADSET_PLUG)) {
            
            if (intent.getExtras().getInt("state") == 1)// if plugged
                Toast.makeText(context, "earphones plugged", Toast.LENGTH_LONG)
                        .show();
            else
                Toast.makeText(context, "earphones un-plugged",
                        Toast.LENGTH_LONG).show();
        } else if (action.equals(Intent.ACTION_MEDIA_BUTTON)) {
            Toast.makeText(context, "button pressed", Toast.LENGTH_LONG).show();
            String key = intent.getExtras().getString("EXTRA_KEY_EVENT");
            Toast.makeText(context, key, Toast.LENGTH_LONG).show();
        }
 
    }
 
}
Код мейнактивити:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.example.receivertest;
 
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.os.Build;
import android.os.Bundle;
 
public class MainActivity extends Activity {
    MyBroadcastReceiver myBroadcastReceiver;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Получаем доступ к менеджеру звуков
 
        myBroadcastReceiver = new MyBroadcastReceiver();
        IntentFilter mediaFilter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);
        mediaFilter.setPriority(2147483647);
        if (Build.VERSION.SDK_INT < 10)
            registerReceiver(myBroadcastReceiver, mediaFilter);
        else
            ((AudioManager) getSystemService(AUDIO_SERVICE))
                    .registerMediaButtonEventReceiver(new ComponentName(this,
                            MyBroadcastReceiver.class));
        registerReceiver(myBroadcastReceiver, new IntentFilter(
                Intent.ACTION_HEADSET_PLUG));
 
    }
}
Когда подключаю\отключаю гарнитуру ресивер срабатывает и на экран выводится тоаст, но при нажатии кнопки гарнитуры ничего не происходит. В чем ошибка не могу понять. Тыкните меня носом откуда копать. заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.09.2014, 13:28
Ответы с готовыми решениями:

Как заставить кнопку работать?
Вечер добрый, форумчане. Уже второй день пытаюсь решить насущную для моего проекта проблему, а именно невозможность нажать на кнопку в том...

Как заставить WebView работать свернутым?
Здравствуйте, Написал приложение, в нем загрузил свой музыкальный сайт. Но не как не могу решить проблему при сворачивании перестает...

Как заставить работать ViewPager + TabLayout в ScrollView?
Здравствуйте. Столкнулся с проблемой - ViewPager напрочь отказывается отображаться в ScrollView. При этом вне ScrollView всё работает как...

7
3 / 3 / 2
Регистрация: 30.09.2014
Сообщений: 50
01.10.2014, 13:33  [ТС]
заметил, что ресивер не работает, когда идет воспроизведение музыки...как только останавливаю, все отлично работает и логи с тоастами шлются. с чем это связано и как исправить кто подскажет?
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
02.10.2014, 08:40
Цитата Сообщение от spider1581 Посмотреть сообщение
с чем это связано
Плеер перехватывает управление с гарнитуры на себя.
0
3 / 3 / 2
Регистрация: 30.09.2014
Сообщений: 50
02.10.2014, 12:06  [ТС]
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Плеер перехватывает управление с гарнитуры на себя.
ну это логично...а как это исправить? у фильтра ресивера стоит максимальный приоритет...что я упускаю?
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
02.10.2014, 13:13
Ну т.к. плеер стоковый, стоит предположить что приоритет у него повыше будет) Может там в настройках самого плеера есть что-то про перехват кнопок гарнитуры. Или вообще в настройках телефона.
0
3 / 3 / 2
Регистрация: 30.09.2014
Сообщений: 50
02.10.2014, 13:21  [ТС]
Цитата Сообщение от Spelcrawler Посмотреть сообщение
стоит предположить что приоритет у него повыше будет
как приоритет может быть больше максимального значения integer?
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Может там в настройках самого плеера есть что-то про перехват кнопок гарнитуры
нет ничего, стоит официальная прошивка с сенсом от штс. очень странно, кстати, что в самой прошивке нет управления однокнопочной гарнитурой. кроме как плей\пауз...
есть предложения как реализовать задуманное?
0
535 / 504 / 114
Регистрация: 12.03.2014
Сообщений: 1,671
02.10.2014, 13:33
Вот тут пишут, что нужно добавить ресиверу аудио менеджер. Как - написано по ссылке.
0
3 / 3 / 2
Регистрация: 30.09.2014
Сообщений: 50
02.10.2014, 13:50  [ТС]
Цитата Сообщение от Spelcrawler Посмотреть сообщение
нужно добавить ресиверу аудио менеджер
именно это я и делаю
Цитата Сообщение от spider1581 Посмотреть сообщение
((AudioManager) getSystemService(AUDIO_SERVICE))
* * * * * * * * * * .registerMediaButtonEventReceiver(new ComponentName(this,
* * * * * * * * * * * * * * MyBroadcastReceiver.class));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.10.2014, 13:50
Помогаю со студенческими работами здесь

Как заставить работать setImageLevel в потомке ImageView
Имею такой layout: &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;LinearLayout...

Как запустить метод в Activity из BroadcastReceiver
Здравствуйте!!! Все до банальности просто и повторяется, по кругу :) Новичок, увлекся Java &amp; Android... Пытаюсь изобразить...

Как поучить/передать данные в/из BroadcastReceiver ?
Например, есть BroadcastReceiver и есть Сервис. BroadcastReceiver получает различные ресиверы от системы (типа...

Как узнать что BroadcastReceiver сообщение зарегистрировано?
Использую GCM для диалога. Когда приходит новое уведомление я передаю id принятого сообщения в activity. Нужно сделать проверку получила ли...

Заставить Android работать с купюроприемником BV20
Друзья, возникла задача заставить купюроприемник взаимодействовать с планшетом под платформой android. Может есть у кого идеи, как это...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru