I'm am looking to make an app that can connect to device automatically and begin sharing data without explicitly being told to by the user (other than the initial bonding). I would like to, if possible:
Auto-connect and share data when in range of previously bonded/favorited device
Start application on and run methods when connected/signaled by device
Maintain connection on sleep.
All of this should be run in the background.
I'm mostly wondering how possible all of this is and if there are any relevant tutorials to look at. I've run through a few and am able to connect/read/write to my bluetooth device. I am however binding to an activity which I feel isn't the right thing to do as the bluetooth disconnects on activity change.
The whole idea seems a bit daunting as it takes from a few areas I'm not entirely confident in: Bluetooth/Services/AsynTasks.
Any help would be appreciated
Related
I've been trying to build an app for several weeks already, but it's taking me nowhere and I feel that I'm wasting my time so I come here to ask for your help.
The application should do this:
Connect Phone A to Phone B using bluetooth
The 2 phones should be able to send messages to each other
If not within range, save the message and hold it until the other phone is within range.
I've read a lot about this subject and I think I'm going to use the BluetoothChat sample and modify it so it can do what I want.
I wonder if such an app is possible and how can I approach it using the BluetoothChat sample code?
I would like to ask for your valuable opinion about the following:
I'm developing an Android app that needs to connect with the BLE device (whose name I know) automatically on starting the app. Furthermore, the app should be able to keep the phone connected to the BLE device (there will be no "connect" and "disconnect" buttons on the app screen). In other words, if established connection is lost for some reason, the app should be capable to detect this and to re-connect again. The user of the app don't need to be aware of this background process. For him/her, it is only important that the phone is connected with the BLE device.
Simply speaking, I know the name of the BLE device (it is called 'HMSoft'). How should I keep the app connected with this BLE module? Should I use some Thread that will do the job for me in parallel with my other activities within the app MainActivity? Or there is some better approach? Did you have similar experience in the past?
Thank you very much for your time and effort. I really appreciate it.
Sincerely,
Bojan.
You will want to wrap the BLE implementation up in a Service. Within that Service, you will have to implement the logic to connect to the BLE device and keep trying to connect to that BLE device if it becomes unavailable.
I'd like to use android's bluetooth for some kind of sensing devices. But I don't want to connect to these devices. As far as I know Devices won't react to scanning when their own bluetooth is disabled. But is there any way to get my app noticed when such a scan has been performed by a remote device, even when my app is running with bluetooth turned off?
I don't want to force toggling bluetooth on, but I need to get some kind of Action started in other devices running the same app. So I'm wondering if some there is any description/data field that can be sent with a bluetooth scan, so if scan is rejected the app has the opportunity to read that data just to know there was this specific call?
I need to leverage context-awareness within my system as to users, not knowing each other, still can interchange content (if they agree). But I need to find some ways of sensing while I also don't want to have all sensors activated all the time.
Hope you can give me a hint, or tell me that this is simply not possible, which would also help me not spending any more time on that.
Thanks.
Im a little new to the android development, I believe I have the basics down but I am wondering the best way to communicate between two phones running the same app. I am looking for something that would be close to instant. For an example, if you sent a message or somekind of variable or string it would appear on the other phones app providing the app was open on both phones. Would be great if I could be pointed in the correct direction here, Thank you!
Assuming you have access to a server that both devices can connect to, the best way to handle this is to set up a socket and have both devices connect to it. That way the messages can be send back and forth and be pushed through immediately (rather than the devices polling for any new thing to do intermittently).
You can learn more about using sockets on android here: http://developer.android.com/reference/java/net/Socket.html
If you're unfamiliar with how to write a server socket, you can write something that works somewhat similarly with a system that just has each device leave a message and have the other device come looking for it, but as I said, that is much less "real time" since then you have to have the devices constantly pestering the server to see if there's anything new to do.
There are also kludgy ways to create a fake socket behavior whereby the http connection never closes and you just keep sending data down the pipe, but if you can avoid it and just use a socket, you should.
I was reading this
http://developer.android.com/guide/topics/wireless/bluetooth.html#QueryingPairedDevices
which is allot of help on how to pair,connect to a bluetooth device.
I have a situation where I have several BT devices that are in Non-Discover mode always. I know the MAC and the PIN of these devices. IS there a way in Android Dev to manually add devices to the PAIRED list so i can just use the connect as a client.
I understand this maual is written allot for V3. i think i will need to do this on 2.0 ; 2.1- has anybody done this before?
Basically these devices I want to connect to are power saving modules I used pre built BT modules to monitor daylight, another one humidity, etc.. every 3hrs or when interrupted and runs of a single battery for months. So turning off divcory on server saves immense power and prevents other people trying to connect and waste battery.
Not sure what you mean by "manually": Do you mean "manually" as in GUI/user interaction, or "manually" as "I do it in my own application code"?
Some suggestions though:
If you can make your BT devices discoverable at all, you could do it this way:
Make your BT device discoverable
Let Android search for and find the device and then initiate a connection
Android will ask for the PIN for pairing with the device; enter the PIN.
Once pairing was successful, Android stores the pairing information for future use, so that you can
Make your BT device invisible again.
From then on your app should be able to connect to the BT device at any time without further pairing operations.
If the said is not an option for you, maybe you want to go another way:
In current Android versions there are different API routines implemented which are neither documented nor exposed in the normal SDK. A hack kind of solution may be to use some of these "hidden" ("#hide"...) APIs, either via reflection or via modification of your SDK installation.
But be aware that this is always a hack and it may work on a specific device with a specific version of Android and is likely to break your app on another device and/or any other Android version.
Having said that, here comes some reference:
Example of how to access "hidden" bluetooth API.
Then, have a look at the source code for android.bluetooth.BluetoothDevice, e.g. here.
In there, public boolean createBond(){...} may do what you want.