we try to develop a ios and andorid app with beacons.
it only uses the entry and exit event.
now our problem is that the android gets the enter event at ~7meter
and the iphone ~1.5meter.
the beacon settings are TX Power -23dbm, Measured Power -80.
is there a way to adjust the android or iphone to get the same range?
This is a common problem with mobile devices because each model has a different Bluetooth antenna and chip, some of which pick up signals better than others. The problem is particularly noticeable across the wide variety of Android models.
There is no magic fix, but you can do ranging at the same time as monitoring, and trigger your logic only if you get a ranging result with beacon.distance < 1.5. This is not a perfect solution, as Android models can sometimes have inaccurate distance estimates due to the same varying antenna gain characteristics. For select devices. This may be a much better solution.
Related
I've done some experiments on different devices and I made each of the scanner and receiver at the same time and saved RSSI get from other nearby devices but the result was strange. first, there was a Huawei p6 that could scan other devices signal but nobody could see its transmit signal. second, the RSSI was completely device-dependent although beacons setting was the same for all of them inside the application and I want these signals to approximate their distance from each other.
question is that is this library reliable for my purpose which is getting approximately distance of devices from each other? I should mention that these results have gotten from android devices and I think that iPhones are another problem
The fragmentation in Android devices means that there is a huge variation in not just bluetooth chips, but in the external bluetooth antennas and phone cases that affect the strength of the signal Android devices receive and transmit.
While the distance estimates provided by the Android Beacon Library are useful for finding the relative distances to different beacons, using the value as an absolute distance estimate will not be consistent across different Android devices. The library does provide a way to tune its distance estimates to a specific hardware model, but unless you are targeting only a small number of devices this approach is not practical to tune for thousands of Android models out there.
My issue is that iOS and various android phones receive number of BLE advertise packet from specific ibeacon, for example In 5 minutes from a specific beacon iOS receives about 904 advertise packets and android phones receive about between 230 to 480 depending on the phone.
Does anyone know if there is a setting that can set scanning rate of the BLE module? If not what else might cause this issue?
I use "CBCentralManager" to utilize BLE module in iOS and "blutoothLeScanner" in Android.
//Creating an instance of CBCentralManager
private let bluetoothManager = CBCentralManager(delegate: nil, queue: nil)
//Start Scanning
bluetoothManager.scanForPeripherals(withServices: nil, options: [CBCentralManagerScanOptionAllowDuplicatesKey:NSNumber(value: true)])
The scan parameters are hardcoded in both OSs, but on Android you can choose between the following three modes:
https://developer.android.com/reference/android/bluetooth/le/ScanSettings.html#SCAN_MODE_BALANCED
https://developer.android.com/reference/android/bluetooth/le/ScanSettings.html#SCAN_MODE_LOW_LATENCY
https://developer.android.com/reference/android/bluetooth/le/ScanSettings.html#SCAN_MODE_LOW_POWER
Note that if you scan in the background, SCAN_MODE_LOW_POWER will be used regardless of what you select.
There is a large amount of variation between Android device models (often called fragmentation) and this applies to the Bluetooth LE behavior as much as anything. Differences between Android phones is a more likely explanation for the discrepancies you see than the scan rate, which defaults to a 100% duty cycle (LOW LATENCY) on all Android devices I have seen, and is similar to iOS.
Given the same conditions, some Android devices scan a similar number of BLE advertisements in iPhones (e.g. Pixel and later Nexus 5+ devices.) But not all Android devices provide as good of results.
You don't say specifically which Android models that you tested which saw fewer advertisement detections, but there are a number of things that might cause this:
Some older Android devices like the Nexus 4, Nexus 7 and Moto G (1st generation) would only detect on advertisement per scan per unique bluetooth device. Restarting the scan was needed to detect a second packet from that device. You might try restarting your BLE scan every second or so to see if this helps.
Some Android devices like the Huawei P9 have very poorly performing BLE antennas, so they are rarely able to detect BLE devices at more than 10 meters, whereas iPhones typically detect at 40-50 meters or more. You can see if this is the cause of your issue by looking at the signal level (RSSI value) for packets received. Are the RSSI values consistently weaker (more negative) on the Android device vs. iOS? If so, then this explains the discrepancy.
I know the same behaviour from some phones.
Note that your peripheral probably does advertising on 3 BLE channels. (?) It might be possible that your Android device only listens on one channel.
Moreover and on some cases even worse, it is possible that your phones listens on one channel at a time and another channel some time later, thus, also does channel hopping for scanning. It is possible that you get aliasing effects and see the advertising only a few times. This is why the Apple Accessory Guide recommends certain advertising intervals of the peripheral. (chap. 23.5)
I and a couple of friends have got a list of requirements for a new project. This project, basically asks us to synchronize a specific directory in a laptop with the user's phone (just like dropbox does) but using BLE for the communication.
Everything is working as expected. We're using Android on the phones and a BlueGiga USB dongle on the laptop side. The only problem we're facing is that we cannot limit the distance in which the phone is detected.
We do know that we can modify the TX Power and also the Advertising mode as it's explained here (https://developer.android.com/reference/android/bluetooth/le/AdvertiseSettings.html). The real problem is that we cannot get the same max distance on every phone because of differences with the chipsets, antennas, etc throughout all the Android devices in the market.
How could we do to limit the connection distance to 1 meter for all the devices running Android? We'd need to rely on the RSSI values but I'm open to different approaches anyway.
Thank you very much in advance guys and remember that everything is working perfectly. We just need to adjust the max distance.
Thanks.
Max.
Simple answer: You can't get an absolutely exact range limitation because of the physical properties of electromagnetic radiation. There are so many things you have to take into account, which makes it a quite difficult and complex task.
What you can do is very sophisticated calculations based ony many different factors to get an approximation. As already mentioned in the comments, you might find helpful libraries with algorithms and formulas for well known devices, chipsets antennas etc. so you don't have to do all the calculations on your own.
With the help of some libraries and tools, you may be able to quite safely determine if the device is within a range of between 1 and 3 meters.
I'm developing an android app which is based on WiFi Direct technology(P2P), so I really need to know how many meters is the range of android WiFi direct performance.based on Android API Guides:
you can discover and connect to other devices when each device supports Wi-Fi P2P, then communicate over a speedy connection across distances much longer than a Bluetooth connection.
but knowing that is not enough for me. because of my aim I need numbers! I mean a range of distances in which Wi-Fi P2P works.
Typical Wi-Fi devices extend their signal up to 100 meters. Source
However the biggest of horror of Wi-Fi is Line of Sight (LOS) which may drop your range dramatically.
That's because Wi-Fi signals at 2.4GHz or 5GHz frequencies. These are easily disrupted by interfering obstacles such as furniture, walls or even mirrors (whose metallic layer reflects the signal) or even water that absorbs the waves. If the app is to be used mostly outside, such obstacle count is supposedly greatly decreased.
Extra:
Wi-Fi signal strength is influenced by a factor called attenuation. Here's a Cool Table displaying the materials influence on the signal.
You might also want to keep in mind that Android Wi-Fi P2P (Wi-Fi direct) is available only since API 14 (4.0 ICS).
Though Samsung allowed using the Wi-Fi Direct ability to connect to devices since API 9 (2.3 Gingerbread).
Anyhow you might want to think if users are "there yet", to be using this standard.
I also liked this Video comparing Galaxy S3 and iPhone 5 connectivity to a GoPro Hero 3 Camera. The maximum range he reached was 100 yards (~90 meters) with perfect LOS.
EDIT:
Antenna-Theory a website dedicated completely to antenna's states that:
Wi-Fi Antenna Efficiencies for handheld mobile devices are typically
on the order of -6 dB to -2 dB
While various online sources note that average laptop antenna efficiency is from -3dB to 3dB, which is not that much different from the cell phone.
You can't really figure out the actual numbers as it all really depends on the surroundings, the target's antenna and the users antenna.
Still phones tend to have lower range than that of the laptops and it's probably between 50-80 meters in clear sight.
Sorry but I can't provide more accurate information as i'm no physicist or a technician, and what you're asking for is pretty abstract :)
This site says the range of WiFi-direct of phones is about 200 feet (~60 meters) while bluetooth has a range of 30 feet (~10 meters).
The official Wi-Fi direct site (see under the point "How far does a Wi-Fi Direct connection travel?") states that the maximum range of WiFi-direct is up to 200 meters (which is 656 feet), but I highly doubt that phones already achieve this range...
"Wi-Fi Direct devices will operate at the same speeds or data rates and range as current Wi-Fi gear. This maximum of about 200 Mbps at 200 feet is much more than the 3 Mbps at 30 feet with Bluetooth. This means you can share and communicate much faster and farther with Wi-Fi Direct."
source: http://www.ciscopress.com/articles/article.asp?p=1620205&seqNum=2
I've done my research on this in the past. Similarly with the other answers, I found that the maximum distance "The Wi-Fi Alliance" claims it to reach is 656 feet. I could be wrong, but I feel that it may be possible to connect both devices to an Apple AirPort device and extend it quite a bit.. Of course you can't expect all of your app purchasers to have one, but in the testing phases it may prove to be very useful.
I'm contemplating the development of an Android app that detects all or most nearby mobile devices (iPhone, Android, etc) in the immediate neighborhood that are turned on. I don't need to interact with these devices, just detect them, and a requirement is that the detected devices can't need to have any special / unusual apps installed on them. The app only needs to work for typical U.S. devices and networks.
I've thought about a few ways to do this (somehow detecting bluetooth, wifi, or cellular transmissions / identifiers), but I'm looking for specific implementation methods for a way to detect a relatively large proportion of nearby devices. I'm not sure which of these methods is possible / feasible or how to put them into practice...
Perhaps using Bluetooth: Is there a way using the Android SDK to detect non-discoverable Bluetooth devices (not in discoverable mode)? The Nokia Developer site seems to suggest this is possible using Service Discovery Protocol (SDP), but I'm not sure if this is possible more generally in Android.
Perhaps using cell tower mast switching simulation? Ok, this is almost certainly beyond the reach of Android, but this article suggests that there may be a way to "mimic cell mast switching process to trigger quiescent phones into transmitting. Phones respond with their ID and authentication signals...".
I think you should see this, it is a paper, and you cannot view it for free, but in the summary, it clearly states:
Concerns about Bluetooth device security have led the specification of the “non-discoverable” mode, which prevents devices from being listed during a Bluetooth device search process. However, a nondiscoverable Bluetooth device is visible to devices that know its address or can discover its address. This paper discusses the detection of non-discoverable Bluetooth devices using an enhanced brute force search attack. Our results indicate that the average time to attack a non-discoverable Bluetooth device using multiple search devices and condensed packet timing can be reduced to well under 24 hours.
But for an android application, you need the detection time to be well under a few seconds instead of less than 24 hours, so a practical solution may not yet be available.