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

Ответить
spider1581
Сообщения: 2
Зарегистрирован: 05 фев 2014, 18:56

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

Сообщение spider1581 » 30 сен 2014, 12:33

Добрый день! Собственно идея: есть стандартный плеер телефона(HTC One m7 Android 4.4.3) и проводная гарнитура с одной кнопкой. Но по нажатию на эту самую кнопку можно только делать плей\пауз и все! Хочу расширить функционал однокнопочной гарнитуры. Задача вроде как тривиальная, но столкнулся с проблемой, ресивер не слушает нажатие кнопки.
Код манифеста:

Код: Выделить всё

<?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>
Код ресивера:

Код: Выделить всё

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();
        }
 
    }
 
}
Код мейнактивити:

Код: Выделить всё

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));
 
    }
}
Когда подключаю\отключаю гарнитуру ресивер срабатывает и на экран выводится тоаст, но при нажатии кнопки гарнитуры ничего не происходит. В чем ошибка не могу понять. Тыкните меня носом откуда копать. заранее спасибо.

spider1581
Сообщения: 2
Зарегистрирован: 05 фев 2014, 18:56

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

Сообщение spider1581 » 01 окт 2014, 12:32

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

Ответить