Android手机基础信息与基础业务开发_第1页
Android手机基础信息与基础业务开发_第2页
Android手机基础信息与基础业务开发_第3页
Android手机基础信息与基础业务开发_第4页
Android手机基础信息与基础业务开发_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘要:本文介绍了 android手机的基础信息的获取方法和手机基础业务(语音和短消息)的开发方法,基础信息包括移 动网络信息、sim卡信息、手机状态信息等,基础业务包括短信发送和拨打号码分析等。最后编写一段代码来实现基础 信息的获取、短信的发送和手机的拨号,并通过模拟器上的操作进行部分功能验证。一、前言具备移动通信基础知识的读者们都知道,只要手机处f开机的状态,无论是否处于通话状态,手机和移动网络会进 行很多信息交互。在非通话状态时,手机通常会有如下动作:网络寻找和选择、川户注册、信号检测等:在通话或者数 据传输时,手机和移动网络除了基木的话音数据传输之外,还耍进行如信号强度监听、数据传输方向

2、指示、小区切换、 短信发送报告等操作。二. 整体介绍当前,大多数手机平台并未开放上述底层网络的接口给开发者,例如windows mobile只是规定了 ril(radio layer interface)的一个标准很多厂商没有实现该接口android手机平台提供了 android.telephony和android.telephony.gsm 两个package给开发者使用。这两个package提供了手机基木信息检测的api,例如网络类型、链接状态以及手机号 码字符操作工具。在android.telephony.gsm中,有一些gsm网络特有的功能,如短信的pdu功能(cdma收发短信 不是用

3、pdu的)。网络接口结构如图1所示,具体实现可以看源代码的hardware/ril/部分。libraries(user space)图1无线层接口结构框图在eclipse的package explore (图2)中我们可以看到,android.telephony构成冇:小区位置,邻居小区信息、手机号码格式监视、手机号码字符工具、电话状态监听、服务状态监听、手机信息管理。其中邻居小区信息的class是1.5版本新增的功能,1.0版本不具备获取邻居小区的方法。在android.telephony.gsm中,除t android平台原有的小区位克和短信class 2外,android平台还特别添加了

4、对3g手机的usim卡的彩信支持。包括链接参数、信息管理.信息通知、用户偏好设置等。ffi android.telephony田 android.telephony.gsms-|oij)celllocation.classs-)oip gsmcelllocation.classs-血 neighboringcelllnfo. class由贏 smsmanager. class田鉉 phonenumberformattingt ext watcher. class 囱齿 smsmessage. classs-|oio phonenumberutils.classs-曲 usimmmsconnec

5、tivityparameters.class田 曲 phonestatelistener.class由氐 usimmmsmanager. classs -loii service5tate.class由血)usimmmsnotification.class田'血 telephonymanager.class 田皈 usimmmsuserpreferences.class图 2 android.telephony 和 android.telephony.gsm 包结构三. 实例编写3.1基础知识我们利用上述两个package.编写一段实际的代码,來获取手机的基础信息,并实现短信的发送和号

6、码的拨打。为 了理解获取的参数、短信、拨号的信息,我们首先耍了解一下移动通信方面的基础知识:cell id:移动蜂窝小区编号。为了能容纳大量的用户,我们町以把一个地理区域划分成许多小区。运营商不是采用单个 人功率的发射器,而是每一个小区由一个小功率的基曲(base station)來提供服务。lac: location area code。位置区域码。为了确定移动台的位置,每个gsm/plmn的覆盖区都被划分成许多位置 区,lac则用于标识不同的位置区。rssi: received signal strength indication.,接收的信号强度指示。无线发送层概念,用來判定链接质量。i

7、mei: international mobile equipment ldentityo国际移动设备身份码。由15位数字组成的电子串号,它与每台手 机一一对应而且该码是全世界唯一的。sim卡卡号:sim卡上有20位数码。前面6位是国家的代号,笫9、10位是各省的编码,第11、12位是年号, 笫13位是供应商代码,笫1419位则是用户识别码,第20位是校验位。mcc: mobile country codeo移动国家号码,由3位数字纽.成,唯一地识别移动用户所屈的国家。我国为460。mnc: mobile network coden 移动为 00,联通为 0仁sms:短消息。一般_则短信能够容

8、纳140字节,也就是约160个7bit的字符、或是140个8bit的字符,中文字、 韩文字与日文字这些占2-byte的字符则可容纳70个。(使用unicode系统)紧急呼叫:是指用手机拨打110、119. 120. 999之类的报警或求救号码。这些号码的紧急性使各国都规定它们可 以使川任何当时可用的网络。在我国,就算手机在没有资费的情况下,甚至你连sim k都没有也可以拨打这些号码。3.2权限设置在这个例子中,我们利用telephony库,实现了小区信息、相邻小区信息、手机imei号、运营商等基础信息的读取。 为了实现上述信息的读取,我们需要在程序中添加权限(permission)。权限用来描

9、述是否拥冇做某件事的权力,当应 用试图在没有权限的情况卜做受限操作.应用将被系统杀掉以警示。在androidmanifestxml屮添加权限使用语句,格view plaincopy to clipboardprint?1. vusespermission android:name= n android.permissionpermission_name” />在本文的实例中,用到了f列权限permissionname权限功能access. coarse loca tion访问cellld或wifi热点来获取粗略的位置access fine loca tion访问精确位置(如gps)acc

10、ess. coarse upda tes允许程序获取位置更新read phone state访问电话状态send sms允许发短信call piione允许拨打电话3.3代码编写我们可以通过如下语句获得移动网络的基础信息:view plain copy to clipboardprint?gsmcelllocation gel = new gsmcelllocation(); cid = gcl.getcid(); /获取小区 号 lid = gcl.getlac(); 获収lac neighboringcellinfo nbinfo =new neighboringcelllnfo(); n

11、bid = nbinfo.get cid(); 获取邻居小区号nbrssi = nbinfo.getrssi(); /获取邻居小区信号强 度 servicestate ss = new servicestate(); oname = ss.get operator alphal on g();获取运营商名称onum = ss.getoperatornumeric(); 获取运营商编号 rm = (ss.getroaming()? nyesw:mnon); 漫游指示通过如下语句来获得手机的基础信息:view plain copy to clipboardprint?1. telephonyman

12、ager tm = (telephonymanager)getsystemservice(telephony_s ervice); callstate = tm.getcallstate(); 通话状态 did = tm.getdeviceld(); 设> i mei 号 inum = tm.getlinel number(); 线路 1 号码 simname = tm. get sim operator nam e(); sim 卡运营商号码 subid = tm.getsubscriberld(); 拨号者id simnum = tm.getsimserialnumber(); /s

13、im 卡序列号 string networkcountrylso = t m. get net workcountry i so(); 国家 号 string networkoperator = tm.getnetworkoperator(); 网络 号 int networktype = tm.getnetworktype(); /网络类 型 int simstate = tm.getsimstate(); /sim 卡状态通过在按钮响应屮添加下列语句,來实现短信的发送:view plain copy to clipboardpri nt?1. string number = et1 .ge

14、ttext().tostring(); /从文木框et1 屮茯取接收方兮 码 string msg = et2.gettext().tostring(); 从文本框et2 中获取短信消 息 smsmanager sms = smsmanager.getdefault(); 新建短信对象 try pending intent pi = pen dinglnte nt.getbroadcast(sms.this, 0, new intent (),0); 新建一个pendingintent实例,用来传递短信发送情况 sms.sendtextmessage(number, null, msg, pi

15、, null); /发送短信 toast.maketext(sms.this,"发送成功",toast.length_long).show(); catch (exception e) toast.maketext(sms.t his,h发送失败nm+ e.getmessage().toast丄ength_long).show(); 短f,;发送方法:public void sendtextmessage (string destinationaddress, string scaddress, string text,pendingintent sentintent, p

16、endingintent delivery intent) throws: hlegalargumentexceptio n ,具体参数含义如下:参数名称参数含义destinationaddtess收件人地址scaddress短信屮心号码,空为默认屮心号码sentlntent当消息发出时,成功或者失败的信息报告通过 pendingintent来广播。成功发送时返回 result.ok,发送失败时返回错误信息。若该参数 为空,则该intent会被所有程序检查一遍,这样 会导致发送时间延长。deliveryintent若该intent非空,当消息发送到收件人时, pendingintent 会被广

17、播。t11egalargumentexception如果收件人或者信息内容为空,抛出“参数错误” 的异常。在android.telephony中,at以使用电话号码处理工貝包phonenumberlltils对-仲数字和字符进行提取、分析、判断,该类的貝体方法见图3。bf isl2key(char);1 isdialable(char) isemerge 仃匚 ynumber(stri ng)c? isglobalphonenumber(string) isisodigit(char);1 isnon separator(char)暫 isreallydialable(char)2 issta

18、rtspostdial(char) | iswellformedsmsaddressfstring).图3 phonenumberutils号码处理类的方法为了通过代码实现拨号呼叫,可以采用调用intent來跳转到拨号盘或者直接进行呼叫。在这里用到了 action_call 和action_dial来进行activity的跳转。在下面实例代码中,利用号码工具对所拨打的号码进行格式判断并呼叫,如 果是紧急号码,直接呼出;如果是普通号码,跳转到拨号盘再确认呼叫:view plain copy to clipboardprint?i1. string number = et1 .gettext().

19、tostring();2. 从文本框et1中获取接收方号码3. if (phonenumberutils.isemergencynumber(number)4. 5. toast.maketext(sms.this,"紧急呼叫! ”,toast丄ength_long).show();6. /判断紧急呼叫7. startactivity(new lntent(lntent.action call, uri.parse("tel:"+ number);8. /紧急呼叫时直接呼出9 10. else if (phonenumberlltils.isglobalphone

20、number(number)11. /判断无效兮码12. startactivity(new lntent(lntent.action_dial, uri.parse(ntel:"+ number);13. /普通呼叫时调用拨号盘再确认呼叫14. else toast.maketext(sms.this,"无效号码”,toast.length_long).show();四、程序测试4.1基础信息测试将所获取到的手机基础信息变虽在textview上显示,紂到效果如图4:中国移动& 11:168川tele4cell id = -1 lac id *1 neighbor

21、id -1 neighbor g = 99 call state = 0 = null o num 5 null device id 000000000000000 roaming $ noline! number =slm operator name = cmcc subscriber id = nullsim serial number» 89014103211118510720 network country iso cnnetwork operator « 46000 network type = 0 sim state =

22、5图4无呼叫时程序运行结果由于程序在模拟器上进行测试,所以获取的小区和lac都是-1,邻居小区信号强度是99。在实际情况下,信号强 度的取值范闌是031,根据换算公dbm = -113 + 2xrssl rssi为0,则信号强度为-113dbm或更小;rssi为 31,则信号强度为-51dbm或更大。运营商代码和手机号码都可以正常显示。call.state 为0,代表手机处于空闲状态, sim_state值为5,代表sim卡处于ready状态。接下來我们通过手机进行拨号测试,來测试call_state的显示正确与否。在模拟器中,我们可以使用如卞拨号流程, 拨号结果如图5所示:1. 运行cmd2

23、. 连接:telnet localhost 55543通话命令:gsm call 10086 (该号码为主叫号码,即在被叫屏幕上来电显示的号码)。另外,发送短信的 命令是:sms sendhello,this is a message。图5来电时屏幕显示电话拨入之厉,在eclipse中再次运行该程序.可以看到call.state变成了 1。在接听之后.左上角出现电话的小图 标,可以看到call.state变成了 2,见图6。在sdk中查到call.state的各种值的定义,可以验证刚才运行结正确的。chtrut mobile中国移动乜11:23c3|telecell

24、id = -1 lac id1 neighbor id = -1 neighbor rssl 二 99 call state - 1 « null o.num - mill device id - 000000000000000 roaming no llnel number =slm operator name = cmcc subscriber id » nullsim serial number 89014103211118510720 network country iso = cnnetwork operator = 46000 network type 0 sim state = 5k 11:200川tele4cell id 二-1 lac id = -1 neighbor id j neighbor rs$i 99 call state - 2 o.rwme 二 null o num = null device id 000000000000000 roaming - no line! number =ym operacor name = cmcc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论