2011-10-15 38 views
0

我想獲得cellId和Lac值,但我仍然「意外停止」錯誤。Android - GsmCellLocation和getCid()錯誤

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
    GsmCellLocation loc = (GsmCellLocation) tm.getCellLocation(); 

    TextView text = (TextView) findViewById(R.id.text); 

    text.setText(loc.getCid()); 
} 

這是非常簡單的程序,我發現了很多次以這種形式,但它的工作無論是在模擬器(在模擬器我有2.3.3和3.0),也沒有在電話(平板電腦3.0)

權限,我有嘗試清單:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 

感謝您的回覆,爾卡

回答

0

是否啓用在設置本地化使用無線網絡的?在android 2.3.4上,你可以設置 - >位置 - >使用無線網絡。啓用它。現在你的代碼應該運行!

0

如果你仍然在尋找這個問題的答案,問題是,loc.getCid()返回一個整數,而text.setText需要一個String。只要改變最後一行:

text.setText(Integer.toString(loc.getCid())); 

我只是嘗試這樣做,它工作正常。

另一點,雖然我不確定這件事(我會好奇聽到別人的經歷):你似乎認爲你是在GSM手機上運行它。 tm.getCellLocation()會返回CdmaCellLocation而不是?由於CdmaCellLocation類沒有get.Cid()方法,所以我認爲將代碼放在if這樣的語句中比較安全:if(tm.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM)。然後,您可以使用methods之一的if(tm.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA)單獨結果。