在手機的運行過程中,操作系統(tǒng)一直都在與底層的外設打交道,其中包括sim卡和無線消息。在手機啟動時,它是如何知道當前的sim卡是移動的還是聯(lián)通的,我用的是哪個小區(qū)的基站,各個基站的信號強度和切換時間又是多少。本例介紹了使用OPhone手機和底層數據的交互,受限于模擬器,部分功能將不能得到實際數據。
一、系統(tǒng)設置
首先,我們需要以下的庫支持:
importandroid.telephony.gsm.*;
import android.telephony.*;
為了可以讀取系統(tǒng)數據,我們還需要在AndroidManifest.xml中添加下列permission:
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission
android:name="android.permission.ACCESS_COARSE_UPDATES"/>
<uses-permission
android:name="android.permission.READ_PHONE_STATE"/>
二、函數介紹
telephony系列庫中有以下class,我們選取部分介紹,并實現(xiàn)功能。
1.CellLocation 小區(qū)信息
static void requestLocationUpdate () 請求位置更新,如果更新將產生廣播,接收對象為注冊LISTEN_CELL_LOCATION的對象,需要的permission名稱為ACCESS_COARSE_LOCATION。
int getCid () 獲得cell id,-1為未知,范圍為0~0xffff
int getLac ()獲得lac id,-1為未知,范圍為0~0xffff
void setLacAndCid (int lac, intcid) 設置當前cell和lac的id
voidsetStateInvalid () 設置當前狀態(tài)無效,cid和lacid都為-1
在Android1.5中,還有NeighboringCellInfo的class,可以看到相鄰小區(qū)的信號強度和編號。
2.ServiceState 服務狀態(tài)設置
常量:
intSTATE_EMERGENCY_ONLY 僅限緊急呼叫
intSTATE_IN_SERVICE 正常工作
intSTATE_OUT_OF_SERVICE 注冊失敗或者無信號
intSTATE_POWER_OFF 無線關閉
方法:
String getOperatorAlphaLong() 運營商名稱,最多16字符
String getOperatorAlphaShort () 運營商名稱,最多8字符
String getOperatorNumeric () 運營商代碼,2位國家碼,2到3位網絡碼
boolean getRoaming () 是否漫游
int getState () 獲取服務狀態(tài)
public void setIsManualSelection(booleanisManual) 設置手動選擇網絡
public void setOperatorName(StringlongName, String shortName, String numeric) 設置運營商名稱
public void setRoaming (booleanroaming) 設置漫游狀態(tài)
public void setState (int state)設置服務狀態(tài)
public void setStateOff () 設置關閉狀態(tài)
public void setStateOutOfService()設置無服務
3.TelephonyManager電話信息管理,具體可以查詢android.jar。
常量
呼叫狀態(tài)
數據狀態(tài)
網絡狀態(tài)
GRPS狀態(tài)
Sim卡狀態(tài)
方法
呼叫、數據、卡狀態(tài)
設備號,用戶號,小區(qū)號,網絡號
網絡類型,卡類型
呼叫者id,語音信箱
三、代碼編寫
在TelephonyManager的初始化中,由于它沒有顯示的constructor,我們需要對其進行初始化。
四、運行結果
將獲取的數據轉帖到textview上,在撥號的過程中,我們可以獲得如下結果:
可以看到,callstate的值為1,可以查到其含義為:CALL_STATE_RINGING
由于使用的是模擬器,故網絡信息顯示均為空。
撥號流程可以用:
1.運行 cmd
2.連接: telnet localhost 5554
3.通話命令:gsm call 15555218135
4.短信命令:sms send 15555218135 Hello,thisis a Message.
實現(xiàn)效果如圖: