iOS9.1 --- can not pair ble device thourgh 'LightBlue'? - bluetooth

Today, I update iOS to iOS9.1. Really bad thing is that can not pair BLE device through 'LightBlue'.
iOS9.0.2 and earlier OS version are all OK.
Can anyone tell me what changed in Core Bluetooth?
I need to update my app to fix this bug in App store, what a bad thing about iOS9.1!

The first thing you’ll want to do is reset your device’s Network Settings. To get that done go to Settings > General > Reset > Reset Network Settings. Your device will forget the Bluetooth device and you’ll now have to reconnect.
If that doesn’t dislodge your problem, you’ll want to try forgetting the Bluetooth connection. To do that go to Settings > Bluetooth > Select your connection using the circular blue i tab > Tap Forget this Device. Try reconnecting.
You can also try resetting all of your settings and there’s a chance it will work for you. To reset all of your settings go to Settings > General > Reset > Reset All Settings. This process could take a few minutes and after it’s done, your device’s settings will be restored to factory defaults. In other words, have your Wi-Fi passwords handy.

Related

Why does Samsung camera app not work without Bluetooth permission?

Since the latest update (I think some time in December 2022), the built-in camera app on my Samsung Galaxy S21 asks for "Nearby devices" permission, and refuses to run if I don't grant it. By "Nearby devices" it means "Bluetooth". I don't know why it calls the permission
"Nearby devices": all other references to Bluetooth call it "Bluetooth",
and you can also access a nearby device using Wi-Fi or even NFC if the device
is close enough.
It doesn't actually need Bluetooth to take photographs, or even to record movies,
but you might have a Bluetooth microphone (I don't) and you might want to use
it to get better sound quality when recording a movie.
Of course the Android best practice advice at
https://developer.android.com/guide/topics/permissions/overview
is not to ask for runtime permissions unless and until you need them,
but Samsung aren't doing that.
I don't want the camera app to announce my presence by probing the Bluetooth headset of
anyone who happens to be near me, and they might regard such an action as intrusive.
So I don't want to give the camera app its nearby devices permission, but it won't
run at all without it.
So how do I get the camera app to run without accessing Bluetooth?
I found some workarounds for this. If your device supports it, you can download Expert Raw from the Galaxy Store. This will take still photos without requiring "Nearby devices" permission. However it doesn't seem to be able to do selfies because there seems to be no way to switch cameras, and it can't do movies or many of the extra tricks that the full camera app can do.
Another option is to run the camera app with Bluetooth disabled. Then it can have its "Nearby devices" permission, but it can't use it. The problem with this is that if you use Bluetooth at other times you have to remember to disable it and enable it.
So I wrote a tiny app which disables Bluetooth, runs the camera app, and restores the previous enabled or disabled state of Bluetooth when the camera app exits. I put this on my home screen instead of the camera app: it has the same icon. You have to remember to exit properly from the camera app using the Back button: the Home or Recents buttons leave my app and the camera app sitting on the task's back stack, so my app doesn't get to run and restore the Bluetooth state.
The app is available on github here in case anyone else wants to use this solution.

Wi-Fi Debug (ADB) - There was an error pairing the device

When I first update to new version of studio I tried to use this new WiFi debug feature and it was working at first time (using QR code or manually typing the code) but now it's stuck with "Connecting to device. This takes up to 2 minutes." message for some time and then I get "There was an error pairing the device" message. Before it would take a couple of seconds to connect. My device is Samsung S10 (12 Android)
EDIT 2: Take a look at the below answers, the actual reason seems to be that the device is assigned a random IP or a MAC via DHCP, if you can disable that via system settings for your specific custom ROM, then it's even better
EDIT: If you see regular disconnections, click on `Pair Device with Pairing Code`, and then pair your device with the following command
adb pair <ip-addr>:<port> <pairing_code>
I was facing the same issue, what I did was switching to the command line way of connecting with the device. You can do so in the following way
Make sure USB Debugging is enabled on the device you intend to connect with
In your device, go to Developer Settings>Wireless Debugging and you will see something like so
Now carefully look at the IP ADDRESS AND PORT section and type the following in the terminal
adb connect <ip-addr>:<port>
And your computer will show under paired devices like the above screenshot
I was able to resolve the issue from within Wi-Fi settings by disabling the Randomized MAC Address feature under Privacy. Using my device's actual MAC address fixes the issue.
I had the same problem but I managed to find the solution.
You have to follow the following steps:
In your smartphone (Go to Settings->Developer options-> Wireless Debugging->Pair device with pairing code).
Copy the ipaddress & port.
For example: 192.168.1.2:42123
and wifi pairing code: 234321.
Open your terminal and go to the following path:
cd %LOCALAPPDATA%/Android/sdk/platform-tools
Paste the following command following this order:
adb pair (ipaddress & port that you saw when you clicked on "Pair device with pairing code")
abd pair 192.168.1.2:42123
Paste the access code to the wifi connection.
Enter pairing code: 41107.
Finally, on the same screen go to the option that says IP address and port and you
will see the same address but with another port (You can find it in this part of your screen), copy it and write the following
command:
adb connect 192.168.1.2:41107
If you see a message like this "connected to 192.168.1.2:41107", you did it you will be able to connect your phone with android studio without any problem.
I fixed it by manually assigning IP addresses for my smartphone and PC at settings of the router. Basically avoiding DHCP.
Restarted the router.
Cleared old pairing.
Started pairing again and now it works fine all the time, and no need to repeat pairing process, just enabling "Wireless debugging" from notification panel and in couple of seconds the device will be available in Android Studio
So next time just enable "Wireless debugging" and it's ready
I don't know why there the issue with dynamic IPs
This worked for me:
Tools --> Troubleshoot Device Connections
Press Next --> Next
Click 'Restart ADB server'
Freshly turn ON Wireless Debugging on device and wait for few seconds.
Note that for me pairing wouldn't work while I was on my VPN. After I paired while off the VPN, I could adb connect ipaddress:port and it worked.

Bluetooth device maintains connection even after passkey (PIN) change

I am using a SPP Bluetooth module to send data between my Android phone app and the module. I stumbled upon an interesting thing today.
I pair to my module by entering a passkey
I can normally send data back and forth between my app and the module
From within my app I disconnect from the module and close my app.
On the module I change its passkey to a new value.
I reopen my app and can still exchange data. I do not need to go through pairing again. All security information exchanged by my phone and module when I first paired them (using the old passkey) seem to still be valid even after changing the PIN on the module.
I then close my app and unpair the device from Bluetooth settings.
After that I pair the two devices to make sure Passkey change was in fact accepted and surely enough it was. I can now only pair with the new PIN.
My surprise is that in point 5 above everything still worked even without updating the PIN also on my mobile phone. I plan on getting around this by calling removeBond() using reflection after I send the module a command to change PIN since this is enough for my particular use case. But if the PIN change could be triggered by something else then my phone this would not work.
My question is if this is normal. Bluetooth specs are quite long so I was hoping someone else knows this. I would imagine that after changing the passkey for a Bluetooth device all devices already paired with it will have to go through the pairing process again, this time with the new passkey. But steps above indicate this is not the case. Is this a bug on my Bluetooth module (Bluegiga WT12) or is this expected behaviour? Has Anyone encountered this before?
Thank you.
Cheers!
So, Bluetooth specs are more friendly than I thought. I found my answer in this paragraph:
The Bluetooth PIN is used to authenticate two Bluetooth devices (that have not
previously exchanged link keys) to each other and create a trusted relationship
between them. The PIN is used in the pairing procedure (see Section 11.2 on
page 241) to generate the initial link key that is used for further authentication.
So passkey is not like a password in a router. It is just a sequence which both devices need to know when connecting so that one authenticates the other. Once they are sure they can trust each other they exchange link keys and those are used for future communication. Passkeys/PINs are then irrelevant.
I hope I understand this right.
Terribly sorry for posting too soon.
Cheers!

List and enable disabled bluetooth-services with WMI?

I'm currently looking for a way to list the services exposed by a remote bluetooth device and to enable them.
Normally I would be using the WindowsAPI-functions (or more likely one of the known wrappers) to list the services and to enable them by GUID (SetServiceEnable).
The problem is, that the device is exposing two Services with the same GUID!
Thus using the windowsAPI-functions only enables one of these services. The other service can't be enabled.
I thought perhaps WMI could do the trick, but I'm still new to WMI and couldn't find any
Windows itself is able to enable both, none or a specific service over the servicemenu.
UPDATE
The problem I want to solve is to be able to enable either the first or the second service. By now only the first service (which is usually the service I need), but I couldn't find a solution to enable the second service (except by using the Windows UI).
If both services are enabled I have two Commports in devicemanager (SPP).
Since I can't add comment/questions (don't have the privilege on stackoverflow yet). Here's my best take.
If I understand correctly, it's invalid to have the service available more than once in the service record, right? Can you right click on the device in Bluetooth Pairing UI and see if you see two services and that you can enable them through the Windows UI? And once you enable them do you see two PNP devnodes under that device in device manager (view by connection) with the corresponding opposite role of the two service you enabled? (I can't try this because I don't know of a device I have with two identical UUIDs.)
As you might already know, when you enable service on a remote device, you are not actually enabling the service on the remote device through the Windows Bluetooth API. What you are doing is telling the core bluetooth component in Windows to generate the corresponding opposite role of the service. (This is what BluetoothSetLocalServiceInfo does.) For example, if the remote device supports A2DP sink, by enabling that service the Bluetooth service on desktop would then register a A2DP source service for that device, which generates a PNP devnode for matching A2DP source drivers to install on that devnode. By disabling that service, the Bluetooth service would then unregister the A2DP source devnode and the PNP devnode would be removed (sort of like unplugging a USB device).
Depending on what profile you are seeing being duplicated, it might not make sense to have two instances of device objects and driver objects that matches on the same mac address of the remote device.
My answer (which is actually not answering your question) is to check if it's even valid for the two services to be enabled in that case on the desktop with the drivers on the desktop that you will be working with. For example, a bundle of A2DP plus HFP would require A2DP and HFP to synchronize certain behavior, such as AVDTP suspend. Depending on the implementation and the drivers, they might not be expecting there are two instances of A2DP driver installed, hence causing the unexpected state of the local drivers.

Is it possible to develop Google TV apps using a Mac and an actual Google TV device?

I don't want to use Linux to use the emulator. Is it possible to use an actual device instead?
If possible, please, show me the references you used to answer.
Yes, you can. But instead of using the traditional USB method, you must debug over IP (this means that both your computer and the Google TV must be on the same network)
To start with, we will assume you have a Google TV and a Workstation [your Mac]
On your Google TV, open Settings, and go to Applications -> Development.
Turn Remote debugging on
Click Debugger IP address and enter the IP of your Workstation (if you have DHCP enabled on your router, you will need to look this up)
Find the IP address of your Google TV [it's available in Settings -> Network -> Status]
On your Workstation, run:
adb connect <Google TV IP Address>
If you got everything right, you will now be able to debug on Google TV just like any other device...
Caveats...
If you for some reason want to disconnect later, run: adb disconnect <Google TV IP Address>
If the IP of your Workstation ever changes, you will need to update this on the Google TV [step 3 above]
Source: Google TV developer guide here
http://mobile.tutsplus.com/tutorials/android/android-futures-creating-android-apps-for-google-tv/
Yes it is very much possible to use a device instead, please read the aforementioned link more specifically the section on testing:
Testing Your Application
As there is no emulator yet available with a true Google TV Android
image, we can only test the effects of the higher screen resolution
and using the application with a touch screen.
The easiest way to do this is to create a new AVD using Android 3.1,
API Level 12, use a resolution of 1920×1080 (or 1280×720), and use a
touch screen setting of false. The performance of the emulators may
make this difficult, but at least you can get an idea of what the
screen will look like and how the navigation or your application will
function without touch.
The only option now is having a Goole TV device and setting it up for debugging mode,
Also there is currently a topic in the Google TV issues asking for the Mac OS emulator.
You can star the issue to receive updates about it and also help to request this feature.

Resources