概述:
Android提供了支持SIP(SessionInitiation Protocol)协议的API. 这让我们可以向APP中添加基于SIP的网络电话功能. Android包括了完整的SIP协议栈并集成了呼叫管理服务, 它可以让APP经过简单的设置就可以支持呼入和呼出, 而不用必须管理会话, 传输级别, 通信或者音频记录或者直接播放. 这里有两种APP可能使用到的SIP API: Video conferencing和Instant messaging.
要求和限制:
这是开发SIP APP的要求:
1. 必须有个移动设备并且配备Android2.3及更高版本.
2. SIP通过一个无线数据连接来运行,所以设备必须有一个数据连接(通过移动数据服务或者WiFi). 这意味着我们不能用AVD来测试--只能在物理设备上测试.
3. 每个APP连接会话的参与者必须拥有一个SIP账号. 有很多不同的SIP提供者提供SIP账号.
SIPAPI类和接口:
下面是Android SIP API中类和接口的概述:
类/接口 |
描述 |
SipAudioCall |
通过SIP处理一个网络音频呼叫. |
SipAudioCall.Listener |
SIP呼叫相关的事件监听器, 比如什么时候收到呼叫(on ringing)或者发出呼叫(on calling). |
SipErrorCode |
定义SIP操作期间返回的错误码. |
SipManager |
提供SIP任务的API, 比如启动SIP连接, 提供相关SIP服务的访问. |
SipProfile |
定义一个SIP配置文件, 包括SIP账户, 域和服务器信息. |
SipProfile.Builder |
创建SIP配置文件的帮助类. |
SipSession |
代表一个SIP会话. 该会话与一个SIP dialog相关联或者不与dialog关联的独立的事务. |
SipSession.Listener |
SIP会话相关的监听器, 比如当一个会话将要注册的时候(on registering)或者将要呼出的时候(on calling). |
SipSession.State |
定义SIP会话状态, 比如”注册”, “呼叫”, “呼入”. |
SipRegistrationListener |
一个接口, 是SIP注册事件的监听器. |
创建Manifest:
如果我们要开发一个使用SIP API的APP, 需要记得该功能只有在Android2.3及以上版本才能支持. 同样, 在运行Android2.3及以上版本的设备中, 并非所有设备都提供对SIP的支持. 想要使用SIP, 要增加下列的权限到APP的manifest中:
l android.permission.USE_SIP
l android.permission.INTERNET
要确保APP可以只被安装在支持SIP的设备上, 需要增加如下权限:
l <uses-sdk android:minSdkVersion=”9” />. 这表示我们的APP需要Android2.3及更高的版本.
要控制APP如何过滤不支持SIP的设备(比如在Google Play上), 增加下列权限到manifest中:
l <uses-feature android:name=”android.hardware.sip.voip” />. 这声明了APP使用SIP API. 声明应该包含一个android:required属性, 表示我们是否希望APP被从不支持SIP的设备中过滤.
如果APP被设计来接收呼叫, 我们必须在manifest中定义一个接收器(BroadcastReceiver的子类):
l <receiver android:name=".IncomingCallReceiver"android:label="Call Receiver"/>
这里是SipDemo中摘录的片段:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.sip">
...
<receiver android:name=".IncomingCallReceiver" android:label="Call Receiver"/>
...
<uses-sdk android:minSdkVersion="9" />
<uses-permission android:name="android.permission.USE_SIP" />
<uses-permission android:name="android.permission.INTERNET" />
...
<uses-feature android:name="android.hardware.sip.voip" android:required="true" />
<uses-feature and