通话和短信

通信和短信功能依托于底层硬件和驱动的支持,不同设备有不同标准的基带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对象,当短信发送完成后,会触发预设的广播事件,通过监听该广播事件,可获知短信发送结果。

更多相关文章

  1. Android中Volley发送带有Cookie信息的请求
  2. Android(安卓)App 安全的HTTPS 通信
  3. Android(安卓)Binder机制浅析
  4. Android利用异步任务AsyncTask发送post请求获取json数据
  5. PC客户端与Android服务端的Socket同步通信(一)
  6. Android(安卓)运行时权限详解
  7. android modbus协议之(三)modbus-TCP/IP通信(安卓系统作为modbus
  8. 实现Android客户端与Eclipse服务器端基于Okthhp简单通信
  9. Android常用异步请求AsyncTask的美中不足之处

随机推荐

  1. 虚拟机常见的网络类型有哪些?linux运维学
  2. 1216CSS优先级
  3. 命名空间与数据库基础
  4. 1215css基础
  5. MySQL基础: 预处理和常用的MySQL函数
  6. CURD常用操作、select常用查询、预处理原
  7. 小写转大写(ASCLL)
  8. 初识指针
  9. 微信小程序实现带参分享并消息卡片获取参
  10. 【Golang语言社区】四川麻将随机初始化牌