TelephonyManager.getNeighboringCellInfo() return a List of neighboring cell information(NeighboringCellInfo), including Received Signal Strength and Cell ID location.

package com.AndroidTelephonyManager;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.NeighboringCellInfo;
import android.telephony.TelephonyManager;
import android.telephony.gsm.GsmCellLocation;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
public class AndroidTelephonyManager extends Activity {
 
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       TextView textGsmCellLocation = (TextView)findViewById(R.id.gsmcelllocation);
       TextView textMCC = (TextView)findViewById(R.id.mcc);
       TextView textMNC = (TextView)findViewById(R.id.mnc);
       TextView textCID = (TextView)findViewById(R.id.cid);
      
       //retrieve a reference to an instance of TelephonyManager
       TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
       GsmCellLocation cellLocation = (GsmCellLocation)telephonyManager.getCellLocation();
      
       String networkOperator = telephonyManager.getNetworkOperator();
       String mcc = networkOperator.substring(0, 3);
       String mnc = networkOperator.substring(3);
       textMCC.setText("mcc: " + mcc);
       textMNC.setText("mnc: " + mnc);
      
       int cid = cellLocation.getCid();
       int lac = cellLocation.getLac();
       textGsmCellLocation.setText(cellLocation.toString());
       textCID.setText("gsm cell id: " + String.valueOf(cid));
      
       TextView Neighboring = (TextView)findViewById(R.id.neighboring);
       List<NeighboringCellInfo> NeighboringList = telephonyManager.getNeighboringCellInfo();
      
       String stringNeighboring = "Neighboring List- Lac : Cid : RSSI\n";
       for(int i=0; i < NeighboringList.size(); i++){
        
        String dBm;
        int rssi = NeighboringList.get(i).getRssi();
        if(rssi == NeighboringCellInfo.UNKNOWN_RSSI){
         dBm = "Unknown RSSI";
        }else{
         dBm = String.valueOf(-113 + 2 * rssi) + " dBm";
        }
        stringNeighboring = stringNeighboring
         + String.valueOf(NeighboringList.get(i).getLac()) +" : "
         + String.valueOf(NeighboringList.get(i).getCid()) +" : "
         + dBm +"\n";
       }
      
       Neighboring.setText(stringNeighboring);
   }   
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
<TextView 
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="@string/hello"
   />
<TextView 
   android:id="@+id/gsmcelllocation"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   />
<TextView 
   android:id="@+id/mcc"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   />
<TextView 
   android:id="@+id/mnc"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   />
<TextView 
   android:id="@+id/cid"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   />
<TextView 
   android:id="@+id/neighboring"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   />
</LinearLayout>
ARE U WORKING IN 2G MODE ?
ReplyDeleteYes.
ReplyDeleteBut It should work on 3G also.
how ?
ReplyDeleteit returns null on 2G and 3G :(
Venus,
ReplyDeleteWhich function return null? getCellLocation()? according to Android document, it return null if current location is not available.
Requires Permission: ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION.
tnx for the reply
ReplyDeletei really appreciate
does it need ACCESS_COARSE_UPDATES permission ?
ReplyDeletethe value of the local variable lac is not used:
ReplyDeleteint lac = cellLocation.getLac();
can u give me a full version of manifest ? please
it is really important to me.
On emulator , is there any way to test this code ?
when i am using this code on api 1.6
ReplyDeletethere is error , that says :
The method getLac() is undefined for the type NeighboringCellInfo.
String.valueOf(NeighboringList.get(i).getLac())
when i am using this code on api 2.1
ReplyDeletethe value of the local variable lac is not used:
int lac = cellLocation.getLac();
can u give me a full version of manifest ? please
it is really important to me.
On emulator , is there any way to test this code ?
this code is not run on the emulator dude :) because emulator is not receive from telephonymanager library :)
ReplyDeletetelephonymanager library run only phone :)
excuse me, would you tell me which phone(brand/model) you used when you test your program? thanks :)
ReplyDeleteby the way, will the mobile devices affect the test result?
hello 欠債貓,
DeleteI use Nexus One. I THINK the function affect by service provider more than device.
Please note that Permission of ACCESS_COARSE_UPDATES is needed.
Thank for your reply, we finally did it!
DeleteAs you say, the permission ACCESS_COARSE_UPDATES is the point.
Thank for your help again. :)
Well, I tried this program in my phone HTC desire S but NeighboringList.size() always returning 0. Please help me to find out.
ReplyDeletehello Pijush,
DeletegetNeighboringCellInfo() return null means info unavailable.
Permission of ACCESS_COARSE_UPDATES is needed for this feature.
Hi, I'm a serious noob with this. I'm currently looking for possibilities to receive neighboring cell info, so it would be pretty AWESOME to get it through an Android app.
ReplyDelete- What is all the data able of being accessed by this command?
- will data be received on neighboring cells for both 2G and 3G technologies?
- will this command/app work on a Samsung Galaxy SII?
I'm using Samsung Galaxy SII. And NeighboringList returns null. I wrote ACCESS_COARSE_UPDATES to manifest.xml file. Will I write another permissions to manifest.xml file?
ReplyDeleteThanks.
When I run this code it returned me "Source not found." I think the problem in this line "GsmCellLocation cellLocation = (GsmCellLocation) telephonyManager.getCellLocation();", and I dont know why.....
ReplyDelete