The device is already paired, so it's in the device list regardless if it's on or not. And discovering still requires the app to run a timer and poll something. If you're going to do that you might as well attempt a blind connect and save yourself a step. I was hoping for a more object-oriented solution that didn't require my app to waste CPU cycles trying to connect to a sleeping device but I haven't been able to find anything like that in the Android BT documentation.
The barcode reader is something of a special case, unlike headphones or a speaker or another device running your app, the reader is designed to stay powered off unless you're actually using it so it disconnects frequently. As a result the connection state is not driven by the app usually but rather by the device itself.
The model our customer is using has a 30-second idle timeout so nothing scanned in 30 seconds means the reader disconnects and powers down. Once the reader wakes up, you need to connect to it ASAP so the user isn't waiting on your app before they can scan something. Because, believe me, our users are somewhat impatient and not very gentle when it comes to peripheral hardware. ?