简体   繁体   中英

Android Bluetooth detect when device is connected issue

I'm currently making an app that adapt the volume depending on the bluetooth device you are connected to.

I am having issue when I want to change the volume of the music

My app detect when a bluetooth device is connected and it can change the volume but it is like it goes too quickly

Here is some of the code:

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);
}

If add a delay of around 3000ms when I change the volume, it will work properly but it's not a clean solution. In fact the toast for the connection will be displayed before the bluetooth device is "completely" connected

I also found an app that do the same thing but it seems that I'm doing the same thing.

Here is its githublink

What's your capture is the ACL connected or ACL disconnected , yes you are right once your toast appears ie the ACL connected does not mean the Bluetooth profile connected(exactly what you said "completely" connected), it only means the physical connection established between two device, you might as well to receive other event, eg HFP/A2dp connected, that's the real profile connected.

However the ACL disconnected is the milestone that the Bluetooth connection is really disconnected.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM