Android手机信息管理

zhongyx 贡献于2011-07-03

作者 User  创建于2009-12-23 01:56:00   修改者User  修改于2009-12-23 09:41:00字数2985

文档摘要:手机信息管理在手机的运行过程中,操作系统一直都在与底层的外设打交道,其中包括sim卡和无线消息。在手机启动时,它是如何知道当前的sim卡是移动的还是联通的,我用的是哪个小区的基站,各个基站的信号强度和切换时间又是多少。本例介绍了使用android手机和底层数据的交互,受限于模拟器,部分功能将不能得到实际数据。
关键词:

 手机信息管理 在手机的运行过程中,操作系统一直都在与底层的外设打交道,其中包括sim卡和无线消息。在手机启动时,它是如何知道当前的sim卡是移动的还是联通的,我用的是哪个小区的基站,各个基站的信号强度和切换时间又是多少。本例介绍了使用android手机和底层数据的交互,受限于模拟器,部分功能将不能得到实际数据。 一、系统设置 首先,我们需要以下的库支持: import android.telephony.gsm.*; import android.telephony.*; 为了可以读取系统数据,我们还需要在AndroidManifest.xml中添加下列permission: 二、函数介绍 telephony系列库中有以下class,我们选取部分介绍,并实现功能。 1.CellLocation 小区信息 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, int cid) 设置当前cell和lac的id void setStateInvalid () 设置当前状态无效,cid和lacid都为-1 在Android1.5中,还有NeighboringCellInfo的class,可以看到相邻小区的信号强度和编号。 2.ServiceState 服务状态设置 常量: int STATE_EMERGENCY_ONLY 仅限紧急呼叫 int STATE_IN_SERVICE 正常工作 int STATE_OUT_OF_SERVICE 注册失败或者无信号 int STATE_POWER_OFF 无线关闭 方法: String getOperatorAlphaLong () 运营商名称,最多16字符 String getOperatorAlphaShort () 运营商名称,最多8字符 String getOperatorNumeric () 运营商代码,2位国家码,2到3位网络码 boolean getRoaming () 是否漫游 int getState () 获取服务状态 public void setIsManualSelection (boolean isManual) 设置手动选择网络 public void setOperatorName (String longName, String shortName, String numeric) 设置运营商名称 public void setRoaming (boolean roaming) 设置漫游状态 public void setState (int state) 设置服务状态 public void setStateOff () 设置关闭状态 public void setStateOutOfService ()设置无服务 3.TelephonyManager 电话信息管理,具体可以查询android.jar。 常量 呼叫状态 数据状态 网络状态 GRPS状态 Sim卡状态 方法 呼叫、数据、卡状态 设备号,用户号,小区号,网络号 网络类型,卡类型 呼叫者id,语音信箱 三、代码编写 在TelephonyManager 的初始化中,由于它没有显示的constructor,我们需要对其进行初始化。 GsmCellLocation gcl=new GsmCellLocation(); StringBuffer sb=new StringBuffer(); sb.append("cid=").append(gcl.getCid()).append("\n"); sb.append("lid=").append(gcl.getLac()).append("\n"); ServiceState ss=new ServiceState(); sb.append("oname=").append(ss.getOperatorAlphaShort()).append("\n"); sb.append("onum=").append(ss.getOperatorNumeric()).append("\n"); sb.append("rm=").append(ss.getRoaming()?"yet":"no").append("\n"); TelephonyManager tm= (TelephonyManager)getSystemService(TELEPHONY_SERVICE); sb.append("CallState=").append(tm.getCallState()).append("\n"); sb.append("deviceid=").append(tm.getDeviceId()).append("\n"); sb.append("subscriberid=").append(tm.getSubscriberId()).append("\n"); sb.append("Line1Number=").append(tm.getLine1Number()).append("\n"); sb.append("SimOperatorName=").append(tm.getSimOperatorName()).append("\n"); sb.append("SimSerialNumber=").append(tm.getSimSerialNumber()).append("\n"); sb.append("NetworkCountryIso=").append(tm.getNetworkCountryIso()).append("\n"); sb.append("NetworkOperator=").append(tm.getNetworkOperator()).append("\n"); sb.append("NetworkType=").append(tm.getNetworkType()).append("\n"); sb.append("SimState=").append(tm.getSimState()).append("\n"); ((TextView)findViewById(R.id.View01)).setText(sb.toString()); 四、运行结果 将获取的数据转帖到textview上,在拨号的过程中,我们可以获得如下结果: 可以看到,callstate的值为1,可以查到其含义为:CALL_STATE_RINGING 模拟器效果: 没有sim卡的真机

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档