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

这篇博客探讨了如何在Android(OPhone)中与底层数据交互,特别是在获取和管理手机信息方面,包括SIM卡状态、小区信息和服务状态。通过权限设置和使用相关API,实现了读取和设置手机的服务状态、运营商信息以及位置更新等功能。虽然模拟器限制了部分功能的实际数据获取,但代码示例展示了在拨号和短信操作中的应用。

在手机的运行过程中,操作系统一直都在与底层的外设打交道,其中包括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.

实现效果如图:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值