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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
spider1581
3 / 3 / 0
Регистрация: 30.09.2014
Сообщений: 50
#1

Как заставить работать BroadcastReceiver? - Программирование Android

30.09.2014, 13:28. Просмотров 1621. Ответов 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));
 
    }
}
Когда подключаю\отключаю гарнитуру ресивер срабатывает и на экран выводится тоаст, но при нажатии кнопки гарнитуры ничего не происходит. В чем ошибка не могу понять. Тыкните меня носом откуда копать. заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2014, 13:28     Как заставить работать BroadcastReceiver?
Посмотрите здесь:

Как заставить работать setImageLevel в потомке ImageView - Программирование Android
Имею такой layout: &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; ...

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

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

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

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

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

Не могу заставить работать Retrofit + RxJava - Программирование Android
Не могу заставит работать Retrofit + RxJava. Кто может помочь? Без RxJava всё работает. Лямбды никак не могу подключить, поэтому...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
spider1581
3 / 3 / 0
Регистрация: 30.09.2014
Сообщений: 50
01.10.2014, 13:33  [ТС]     Как заставить работать BroadcastReceiver? #2
заметил, что ресивер не работает, когда идет воспроизведение музыки...как только останавливаю, все отлично работает и логи с тоастами шлются. с чем это связано и как исправить кто подскажет?
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
02.10.2014, 08:40     Как заставить работать BroadcastReceiver? #3
Цитата Сообщение от spider1581 Посмотреть сообщение
с чем это связано
Плеер перехватывает управление с гарнитуры на себя.
spider1581
3 / 3 / 0
Регистрация: 30.09.2014
Сообщений: 50
02.10.2014, 12:06  [ТС]     Как заставить работать BroadcastReceiver? #4
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Плеер перехватывает управление с гарнитуры на себя.
ну это логично...а как это исправить? у фильтра ресивера стоит максимальный приоритет...что я упускаю?
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
02.10.2014, 13:13     Как заставить работать BroadcastReceiver? #5
Ну т.к. плеер стоковый, стоит предположить что приоритет у него повыше будет) Может там в настройках самого плеера есть что-то про перехват кнопок гарнитуры. Или вообще в настройках телефона.
spider1581
3 / 3 / 0
Регистрация: 30.09.2014
Сообщений: 50
02.10.2014, 13:21  [ТС]     Как заставить работать BroadcastReceiver? #6
Цитата Сообщение от Spelcrawler Посмотреть сообщение
стоит предположить что приоритет у него повыше будет
как приоритет может быть больше максимального значения integer?
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Может там в настройках самого плеера есть что-то про перехват кнопок гарнитуры
нет ничего, стоит официальная прошивка с сенсом от штс. очень странно, кстати, что в самой прошивке нет управления однокнопочной гарнитурой. кроме как плей\пауз...
есть предложения как реализовать задуманное?
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
02.10.2014, 13:33     Как заставить работать BroadcastReceiver? #7
Вот тут пишут, что нужно добавить ресиверу аудио менеджер. Как - написано по ссылке.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2014, 13:50     Как заставить работать BroadcastReceiver?
Еще ссылки по теме:

BroadcastReceiver - Программирование Android
У меня такой вопрос если я создал ресивер и прописал его в манифесте. Мой ресивер прослушивает определенные интенты. И у меня такой вопрос...

BroadcastReceiver и startActivity - Программирование Android
У меня есть служба и BroadcastReceiver. Когда приходит событие, то я вызываю startService. Если служба не запущена, то она запускается и...

BroadcastReceiver + static переменная - Программирование Android
Работая с бродкаст ресивером задался вопросом, как же он всё-таки работает?) Есть следующий код, который фиксирует состояние телефонного...

Виджеты, BroadcastReceiver и Строки - Программирование Android
Здравствуйте. Занимаюсь созданием виджета. Делаю что то наподобие нажатия на кнопку. Использую Broadcast. Предполагается ,что после нажатия...

Servise, BroadcastReceiver, Activity - Программирование Android
Здравствуйте, есть сервис и активити, сервис возвращает данные активити через BroadcastReceiver... все работает отлично, но когда виходиш...


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

Или воспользуйтесь поиском по форуму:
spider1581
3 / 3 / 0
Регистрация: 30.09.2014
Сообщений: 50
02.10.2014, 13:50  [ТС]     Как заставить работать BroadcastReceiver? #8
Цитата Сообщение от Spelcrawler Посмотреть сообщение
нужно добавить ресиверу аудио менеджер
именно это я и делаю
Цитата Сообщение от spider1581 Посмотреть сообщение
((AudioManager) getSystemService(AUDIO_SERVICE))
* * * * * * * * * * .registerMediaButtonEventReceiver(new ComponentName(this,
* * * * * * * * * * * * * * MyBroadcastReceiver.class));
Yandex
Объявления
02.10.2014, 13:50     Как заставить работать BroadcastReceiver?
Ответ Создать тему
Опции темы

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