My Android version is 4.2.1 and I am trying to make use of TelephonyManager.getAllCellInfo()
method. In my manifest file I have the ACCESS_COARSE_UPDATES
, ACCESS_COARSE_LOCATION
, ACCESS_FINE_LOCATION
permissions. However that method returns null
.
From TelephonyManager.getAllCellInfo()
javadoc:
This is preferred over using getCellLocation although for older devices this may return null in which case getCellLocation should be called.
Some sources report that this method is only implemented on CDMA/LTE devices, and other types of devices (including GSM/LTE ones) will return null. Where implemented, it will return only LTE cells.
TelephonyManager.getCellLocation()
will return only GSM/UMTS or CDMA cells. It it limited to one cell, the one with which the device is currently registered. This is your safest bet if you are sure your code will only be running on GSM/UMTS or CDMA devices, and if you are only interested in the cell with which the device is currently registered.
To get information about other surrounding cells, use TelephonyManager.getNeighboringCellInfo()
. However, it is limited to GSM/UMTS cells. Also, its implementation depends on the radio firmware. Most Samsung devices (and quite a few others) will return an empty list.
Conclusion: getting information about nearby cells on Android is pretty messy business at the moment. You may need to use a combination of all three methods to get the information you want, and even that way, some things may be inaccessible.