`
mmdev
  • 浏览: 12932613 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Android(OPhone) 学习笔记 - 手机信息管理

阅读更多

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

一、系统设置

首先,我们需要以下的库支持:

import android.telephony.gsm.*;
import android.telephony.*;

为了可以读取系统数据,我们还需要在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,我们选取部分介绍,并实现功能。

1.CellLocation 小区信息

static void requestLocationUpdate () 请求位置更新,如果更新将产生广播,接收对象为注册LISTEN_CELL_LOCATION的对象,需要的permission名称为ACCESS_COARSE_LOCATION

int getCid () 获得cell id-1为未知,范围为00xffff

int getLac ()获得lac id-1为未知,范围为00xffff

void setLacAndCid (int lac, int cid) 设置当前celllacid

void setStateInvalid () 设置当前状态无效,cidlacid都为-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位国家码,23位网络码

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,我们需要对其进行初始化。


四、运行结果

将获取的数据转帖到textview上,在拨号的过程中,我们可以获得如下结果:



可以看到,callstate的值为1,可以查到其含义为:CALL_STATE_RINGING

由于使用的是模拟器,故网络信息显示均为空。

拨号流程可以用:


1.运行 cmd
2.连接: telnet localhost 5554
3.通话命令:gsm call 15555218135

4.短信命令:sms send 15555218135 Hello,this is a Message.

实现效果如图:



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics