Android蓝牙检测设备连接时的问题

时间:2016-08-22 10:05:49

标签: java android bluetooth

我目前正在根据您所连接的蓝牙设备制作适应音量的应用。

当我想要改变音乐的音量时,我遇到了问题

我的应用检测到蓝牙设备何时连接,它可以改变音量,但就像它太快了

以下是一些代码:

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        BluetoothDevice d = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

        if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
            deviceConnected(d);
        }
        else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {
            deviceDisconnected(d);
        }
    }
};

private void deviceConnected(BluetoothDevice bluetoothDevice) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    boolean showToasts = prefs.getBoolean("show_toasts", false);
    if (showToasts) { Toast.makeText(this, getResources().getString(R.string.connected_to) + " " + bluetoothDevice.getName(), Toast.LENGTH_SHORT).show(); }

    mDeviceDAO = new DeviceDAO(this);
    mDeviceDAO.open();

    DeviceOptions device = mDeviceDAO.select(bluetoothDevice.getAddress());
    if (device == null) { return; }

    if(device.getActivated() == 0) {
        return;
    }

    int v = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
    saveLastVolume(v);

    int volume = device.getVolume();

    int flag = 0;
    if(prefs.getBoolean("show_am_ui", false)) {
        flag = AudioManager.FLAG_SHOW_UI;
    }
    mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
            volume,
            flag);
}

如果在更改音量时添加大约3000毫秒的延迟,它将正常工作,但它不是一个干净的解决方案。事实上,连接的吐司将在蓝牙设备完全"之前显示。连接

我还发现了一个应用程序做了同样的事情,但似乎我做了同样的事情。

Here is its githublink

1 个答案:

答案 0 :(得分:0)

您的捕获是ACL connected还是ACL disconnected,是的,一旦您的吐司出现就是对的,即连接的ACL并不意味着蓝牙配置文件已连接(正是您所说的“完全”连接),它只表示在两个设备之间建立的物理连接,您也可以接收其他事件,例如HFP / A2dp连接,这是连接的真实配置文件。

然而,ACL disconnected是蓝牙连接真正断开的里程碑。