Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

java - Null Issue with NeighboringCellInfo, CID and LAC

For a while I was trying to get CellID and LAC of near base stations. Unfortunately I did not manage to do that. First option was to use:

GsmCellLocation xXx = new GsmCellLocation();  
    CID = xXx.getCid();  
    LAC = xXx.getLac();  
    Toast output = Toast.makeText(getApplicationContext(), "Base station LAC is "+LAC+"
" 
      +"Base station CID is " +CID, Toast.LENGTH_SHORT);  
    output.show();

But in this case I receive -1 value (as I understand that means it is not a GSM, but when i check with isGSM it shows "true"). Another way I have found surfing the net (i updated it a bit)

public void GetID(){  
 List<NeighboringCellInfo>  neighCell = null; 
 TelephonyManager telManager = ( TelephonyManager )getSystemService(Context.TELEPHONY_SERVICE); 
 neighCell = telManager.getNeighboringCellInfo();  
 for (int i = 0; i < neighCell.size(); i++) {  
 try {  
   NeighboringCellInfo thisCell = neighCell.get(i);  
   int thisNeighCID = thisCell.getCid();  
   int thisNeighRSSI = thisCell.getRssi();  
   log(" "+thisNeighCID+" - "+thisNeighRSSI);  
 } catch (NumberFormatException e) {  
   e.printStackTrace();
   NeighboringCellInfo thisCell = neighCell.get(i);  
   log(neighCell.toString());  
 }  
}  
}

But in this case the application just crashes right after I press the execute button. Eclipse shows no errors. May be someone have any ideas how to fix my problems?

Logcat says: 10-05 22:53:27.923: ERROR/dalvikvm(231): Unable to open stack trace file '/data/anr/traces.txt': Permission denied

Used permissions:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />

May be the problem is that i forgot to include:

TelephonyManager telManager = ( TelephonyManager )getSystemService(Context.TELEPHONY_SERVICE);

Update. I included row from above, crash is gone but now after I press the button nothing happens. Updated source code.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Have you verified that you have the correct permissions set in your manifest file?

The TelephonyManager requires a number of permissions depending on the API you use. You need READ_PHONE_STATE for most of the API's, in addition the documentation for getNeighboringCellInfo mentions ACCESS_COARSE_UPDATES, however I think this may be a doc mistake and you actually need ACCESS_COARSE_LOCATION which is documented as "Allows an application to access coarse (e.g., Cell-ID, WiFi) location"


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

57.0k users

...