3 / 3 / 2
Регистрация: 30.09.2014
Сообщений: 50

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

30.09.2014, 13:28. Показов 3742. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru