Android之通话和短信

通话和短信

通信和短信功能依托于底层硬件和驱动的支持,不同设备有不同标准的基带BaseBand硬件。在底层之上,Android抽象了通信接口层RIL,由通信守护服务和设备厂商的通信类库组成。设备启动时,守护服务会加载通信类库,并监听特定的端口启动通话相关的Socket服务。

 

    通信接口联通了上层类库和底层设备。用户需要拨号等通信请求时,上层类库会将请求转换成特定指令,通过Socket连接并发送至守护服务,通信守护服务调用通信类库,通过底层硬件将请求发送出去。

 

Android的框架层,通话和短信功能定义在telephony包,负责建立于RIL服务的连接,并将用户的请求转换成指令和数据进行传输。不同的通话协议中的一些特殊的功能都由各自的Java包提供,如gsm提供获取GSM协议相关的参数。

在应用层,处理通话请求的通话应用Phone ApplicationAndroid中最为特殊的应用。和框架耦合密切,负责所有通话请求相关的处理。系统提供的通话应用不能被第三方取代,一次保证通话的可靠。

 

通话的处理

telephonyManager查看通话状态、SIM卡信息

telephonyManager.getPhoneType通话网络类型

telephonyManager.getCallState通话状态

使用telephonyManager.listen函数,注册telephonyManager.phoneStateListener适时监听通话状态的变更,适时查询来电显示。

 

出于安全考虑,没有将拨号呼叫、接听电话的接口暴露,应用中需要打电话,需要Intent实现。

StartActivitynew IntentIntent.ACTION_DIAL, new URI.parse(“tel:XX”)))

StartActivitynew IntentIntent.ACTION_CALL, new URI.parse(“tel:XX”)))

 

短信的发送和接受

SmsManager可以控制发送短信或彩信。

//构造回掉事件,短信发送结束后,会发出对应的Intent请求

Intent intent = new Intent(“com.sample.sms_sent”);

Intent.putExtra(“sms_id”, GenerateSmsId());

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

//发送文本短信

SmsManager smsManager = SmsManager .getDefault();

smsManager.sendTextMessage(phone_number, null, text_content,  pendingIntent,null);

PendingIntent是异步Intent对象,当短信发送完成后,会触发预设的广播事件,通过监听该广播事件,可获知短信发送结果。

猜你喜欢

转载自aoyouzi.iteye.com/blog/1996566
今日推荐