I want to programmatically measure the phone signal strength in a mobile phone. I don't actually care about the mobile phone or the programming environment: It can be based on android or windows mobile or even J2ME and can be from any manufacturer (please no iPhone). However, it needs to be a real, commercial mobile phone and not a special measurement device.
This problem is not as easy as it seems with a first look. I am aware that there already exist a number of methods that claim to return the phone signal strength. Some of these
are:
SystemState.PhoneSignalStrength for WM6
RIL_GetCellTowerInfo for WinCe (dwRxLevel member of returned RILCELLTOWERINFO struct)
android.telephony.NeighboringCellInfo.getRssi() for android
The problem with the above is that they only return a few (under 10) discrete values, meaning that, for instance, the return values of SystemState.PhoneSignalStrength can only be translated to (for instance) -100 dbm, -90 dbm, -80 dbm, -70 dbm and -60 dbm, something that is not useful for my application, since I'd like to have as much precision as possible.
It doesn't matter if there is an undocumented solution that only works on only one phone, if you can tell me a way I'd be grateful.
Thanks in advance
Please check about JSR-256 Mobile Sensor API for Java ME. Nokia S60 5th edition devices support this API. You can check about network signal intensity by using this API. But, it might be good to ask it's granularity from Nokia Forum first.
Here's a solution I found for people who are still looking for an answer:
Some windows mobile HTC mobile phones have a program called fieldtest.exe which contains the information I need (probably other phones also have that, I've only tested with a specific HTC but from search on google I understand that most HTC WM phones it). The fieldtest program not only has the exact signal strength for the phone, but also a big amount of other very useful telephony information not accessible otherwise.
The only problem is how can you use the data of that program in your process since all the values are stored in a ListView.
Well, that was the point of another question I had posted.
So, the solution is to run the fieldtest program and extract / steal the required values from there !
There is a good tutorial that explains how to get the Real GSM signal measured by your phone
Try this tutorial:
http://www.firstdroid.com/2010/05/12/get-provider-gsm-signal-strength/
Hope it help,
Adrian.
On WindowsCE platforms this might be tough. The last platform I worked on used a Siemens modem which I could directly access and get their own information from. However since their last firmware update they've now closed this off and forced me to go via RIL.
I'm guessing you might have to find a particular unit with a particular modem. However I don't know of any in particular. Sorry. :(
Related
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.
When I make a scan using the WifiManager from Android SDK, I can get all scannable access points near me. However, I noticed that the result include all access points, including those mobile phones that have mobile hotspot turned on.
What would be the efficient way to differentiate/filter them, so that I can just only record the "real" access points and not everything?
Thanks.
edit - 3/3/2015
While searching for answer myself, I found the following post:
https://networkengineering.stackexchange.com/questions/5755/is-there-any-way-to-differentiate-mac-address-of-an-access-point-from-that-of-a
I guess if there is no direct/simple way, I would need to build a database of manufacturer based on OUI then filter the scan results I have. With this at least I can tell devices that states Samsung or Xperia are not fixed access points. Perhaps that's the only solution for the time being.
Is there any way to simulate the behaviour of a cellular mobile network (GSM/UMTS) in the Eclipse Android emulator?
More specifically: I want to develop an app to show information about the network, such as coverage level, parameters of neighbouring cells etc, as provided by the TelephonyManager and other related classes. I would like to do as much debugging as possible with the emulator, before testing in an actual phone.
For that I would need the emulated phone to "see" a functioning cellular network, with its protocols and parameters. Is that possible?
Emulator doesn't give you the option of setting that things. I have developed a toy app for showing network parameters and the only way I found was using a real phone.
By the way, not all phones implement all methods of Android's API, so you will find that some parameters will not be shown. And also many parameters are not available from API and you will need to get them throw AT commands (you will need a rooted device)
Note: I realize this question is two years old, but since this question received a slight edit from its original author 5 minutes ago and so got bumped back up to the front of the site, I am assuming that he may still be looking for an answer.
Yes, AT&T provides such a free tool to simulate and analyze different network conditions to a certain extent. And it can be used in conjunction with Eclipse ADT, Android Studio, or something else entirely. So it's not tied to any particular IDE.
http://developer.att.com/application-resource-optimizer
That being said, I have no idea if it will give you any cell tower related meta data.
I need to get the mobile cell tower timing advance.
Is it possible on Android 2.3+ ?
[edit]
It seems that it's not possible to retreive the timing advance...
Is it possible to know the distance between the mobile and the cell and the bearing otherwise ? I suppose I can't use the Google hidden geolocation api in commercial application ;-)
[/edit]
Thanks
For LTE technology there is already an access to Timing Advance values: see http://developer.android.com/reference/android/telephony/CellSignalStrengthLte.html#getTimingAdvance()
This is currently not implemented, and it will be a hard task because it is device-dependent.
The actual timing advance is only known by the modem, also called the baseband processor (BP). The modem is coded by the device's constructor and thus cannot be modified, and can differ between constructors and devices.
Android runs on the application processor (AP) and uses AT commands to communicate with the BP (modem). For example, Android internally sends AT commands to the modem to send SMS, receive calls, ...
The only way to get the actual timing advance would be to query the BP (with an AT command), but whether the constructors implement a specific AT command to get it is up to them. Unfortunately almost no devices implement it (only very old ones), so there is no way to get this information.
I don't think it's a good idea to use timing advance for geolocation, since it is only relevant on GSM networks. Once the device hands over to UMTS networks, no more timing advance.
Why not use http://developer.android.com/guide/topics/location/obtaining-user-location.html ?
If you need Antenna location you don't need Timing Advance. Then you need LAC, CID etc. which are all part of the public AOS API, and then you can query some public database for the location of these. There are dozens of Android apps that already does this. Perhaps even as an example app for Android developers. Google it.
However, GSM Timing Advance (TA) knowledge is definitely still of interest for several other reasons. So if someone know how to extract this info from the Android vendor RIL, please let us know.
I live in the UK and, as far as I know, we don't have CDMA here.
I'm developing an app that reads the signal strength. GSM is not a problem but without a means of testing on my phone or the emulator, the only way I can see of testing CDMA is to release a public alpha with a request for testing feedback.
Has anybody else tackled this problem?
edit 181111:
The best answer (the only answer) so far is to offer it for testing on oDesk. I don't know whether that answer was removed by the author or a demigod, but other than that my only gain so far is a tumbleweed sticker. Someone out there must have had a need for this?
As far as I am aware, 3g coverage in the UK is wcdma. GSM is 2g
Silence. No real answer - I suppose that the atlantic is too great a gulf for experience to drift across.
I released the app and noted that out of 5,000 downloads there were only two errors. This would appear to coincide with downloaders who didn't read the statement that it would not work with CDMA. One of the phones in question was only released in CDMA form.