如何在Android应用程序中收听蓝牙耳机按钮?

时间:2019-12-29 02:08:42

标签: java android bluetooth

在Android应用中处理蓝牙媒体按钮的正确方法是什么?这时,我想要的只是当我按下蓝牙耳机上的“暂停/播放”按钮时触发的事件。不知何故,我昨天有一个可行的解决方案,而今天却不起作用。在不重新安装应用程序或手机上未进行任何更新的情况下,永远不会输入我的onReceive子类的BroadcastReceiver方法。我的目标是Android 9.0,因为这只适合我自己。

我将以下两个问题中的信息用于解决方案:

How to capture key events from bluetooth headset with android

BroadcastReceiver for ACTION_MEDIA_BUTTON not working

这是昨天工作的最低要求,目前无效:

AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.example.myapplication">

        <uses-permission android:name="android.permission.BLUETOOTH" />

        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme"
            tools:ignore="GoogleAppIndexingWarning">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <receiver android:name=".MediaButtonIntentReceiver">
                <intent-filter android:priority="2139999999">
                    <action android:name="android.intent.action.MEDIA_BUTTON" />
                </intent-filter>
            </receiver>
        </application>

    </manifest>

MainActivity.java

    package com.example.myapplication;

    import androidx.appcompat.app.AppCompatActivity;

    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.media.AudioManager;
    import android.os.Bundle;

    public class MainActivity extends AppCompatActivity {

        MediaButtonIntentReceiver mMediaButtonReceiver = new MediaButtonIntentReceiver();
        IntentFilter mediaFilter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON);

        AudioManager mAudioManager = null;
        ComponentName mReceiverComponent = null;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            mAudioManager =  (AudioManager) getSystemService(Context.AUDIO_SERVICE);
            mReceiverComponent = new ComponentName(this, MediaButtonIntentReceiver.class);

            mediaFilter.setPriority(2139999999);
            registerReceiver(mMediaButtonReceiver, mediaFilter);
        }
    }

MediaButtonIntentReceiver.java

    package com.example.myapplication;

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.util.Log;

    public class MediaButtonIntentReceiver extends BroadcastReceiver {

        public MediaButtonIntentReceiver() {
            super();
            Log.i("mylog",  "init");
        }

        @Override
        public void onReceive(Context context, Intent intent) {
            Log.i("mylog", "receive");
            abortBroadcast();
        }
    }

0 个答案:

没有答案