蓝牙接收器响应时间

Bluetooth Receiver response time

我有以下接收器(非常简单):

bluetoothReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)) {
            stopMusic();
        }
    }
};

ctx.registerReceiver(bluetoothReceiver, new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED));

权限:

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

我想做的是,当 BT 耳机断开时停止音乐。它有效,但响应时间不佳 - 音乐从设备持续约一秒钟,直到接收器检测到事件。我查看了 Youtube 应用程序,发现这种情况几乎立即生效,无需从设备的扬声器播放任何音乐。知道如何让广播接收器立即检测到 ACTION_ACL_DISCONNECTED 吗?

选项 1:尝试为您正在创建的 IntentFilter 设置更高的优先级

ItentFilter intentFilter= new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED); 
intentFilter.setPriority(999) /// highest possible priority value 
ctx.registerReceiver(bluetoothReceiver, intentFilter);

优先级较高的过滤器应在应用程序代码之前执行

See the android documentation for further information.

选项 2:如果广播接收器仍然没有立即检测到 ACTION_ACL_DISCONNECTED 并且设备仍在短时间内播放音乐,您还可以尝试设置一个 intentfilter 来监听音频输出正在改变(AudioManager.ACTION_AUDIO_BECOMING_NOISY)。您也可以在此处停止设备播放音乐。

Android documentation