views:

1136

answers:

4

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

+1  A: 

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. :(

Quibblesome
+2  A: 

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.

Wonil
I am aware of the SensorInfo[] signalInfo = SensorManager.findSensors("network_field_intensity", null); command, however I thought that something that isn't supported in Android or Windows Mobile wouldn't be supported on the more restricted J2ME environment. However, I'll try to find more info on this ...
Serafeim
Samsung and Sony-Ericsson also have phones with S60 5th edition and JSR-256
QuickRecipesOnSymbianOS
I think you will find the same limitation in measurement values with most JSR-256 implementations as well. The Latest Sony Ericsson featurephones also support network field intensity as a JSR-256 sensor.
Ola
+2  A: 

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 !

Serafeim
+1  A: 

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.

azelez
This seems interesting - however from what I see it is supported in Android OS 2.1 and not older versions. I don't have such a phone so I cannot test right now, however can anybody answer the question on granularity ? How many discrete values will this function return on a specific phone ?
Serafeim