Goal:
I\'m trying to get my android service to auto-connect to an already paired bluetooth device when its in range.
As mentioned before, there’s no easy way to do that with Bluetooth Classic other than by constantly scanning.
The car radio scenario you mentioned, however, works with some car radios—mine automatically establishes a Bluetooth connection with my phone as soon as I turn the radio on. I have observed similar behavior with Bluetooth keyboards.
I can only speculate that these peripherals periodically try to connect to paired devices until it is sucessful. This makes sense for a peripheral in certain conditions:
Obviously, that depends on your ability to influence the behavior of the paired device. If it’s an off-the-shelf device, it either works or it doesn’t—but if you’re designing a custom peripheral, it’s worth considering.
As far as I know there is no way to automatically connect to a generic Bluetooth device as soon as it's in range. Your best bet is to have an inquiry loop, periodically querying available devices and connecting to ones you are bonded with (although, as you said, this is fairly battery intensive).
However, if your device (both the phone and the peripheral) support Bluetooth 4.0 (LE) as well as GATT, you can use connectGatt method that will automatically connect as soon as the device becomes available (again, not too sure about battery implications although limited testing I have done thus far shows that it is not significant).
I'm not entirely certain what the behaviour of connectGatt
is when device is non-GATT but it may be worth investigating - my guess would be that you'd receive a callback with status GATT_FAILURE when device becomes in range but doesn't support GATT (this would at least give you an indication of when to connect).
If you find a solution or investigate the behaviour of this method on non-LE / non-GATT devices please do update your question as I'd be quite curious to find out more about it.
And what about another case - as soon as BT device X connects with the phone, connect to BT device Y when in range (and start latest playing app)?
The real life situation: in my Volvo car I have a built in BT for calls and I have added additional BT for audio. The internal BT connects to the phone as soon as I start a car. But the added one does not.