原文地址:/intl/ja/guide/topics/connectivity/sip.html翻译:tyutNo4更新:2012.06.06Android提供了⼀个支持会话发起协议(SIP)的API,这可以让你添加基于SIP的网络电话功能到你的应用程序。
Android 包括⼀个完整的SIP协议栈和集成的呼叫管理服务,让应用轻松无需管理会话和传输层的沟通就可设置传出和传⼊的语音通话,或直接音频记录或播放。
以下类型的应用程序可能使用SIP API:视频会议。
即时消息。
* 条件和限制*以下是开发⼀个SIP应用程序的条件: * 你必须有⼀个运行Android2.3或者更高版本的移动设备。
* SIP是通过无线数据连接来运行的,所以你的设备必须有⼀个数据连接(通过移动数据服务或者Wi-Fi)。
这意味着你不能在模拟器(AVD)上进行测试,只能在⼀个物理设备上测试。
详情请参见应用程序测试(Testing SIP Applications)。
* 每⼀个参与者在应用程序的通信会话过程中必须有⼀个SIP账户。
有很多不同的SIP服务提供商提供SIP账户。
* SIP API类和接⼝*以下是Android SIP API中包含的⼀些类和⼀个接⼝(SipRegistrationListener)的概述: {|style="border-spacing:0px;margin: 4px 4px; width: 90%; border-left:1px solid #ccc;border-top:1px solid #ccc; "|-style="background:#DEE8F1; " ! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | 类/接⼝ ! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | 描述|- style=" vertical-align:top;" | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | SipAudioCall | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 通过SIP处理网络音频电话 |- style=" vertical-align:top;" | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | SipAudioCall.Listener | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " |关于SIP电话的事件监听器,比如接受到⼀个电话(on ringing)或者呼出⼀个电话(on calling)的时候 |- style=" vertical-align:top;" | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | SipErrorCode | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 定义在SIP活动中返回的错误代码 |- style=" vertical-align:top;" | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | SipManager | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 为SIP任务提供APIs,比如初始化⼀个SIP连接。
提供相关SIP服务的访问。
|- style=" vertical-align:top;" | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | SipProfile | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 定义了SIP的相关属性,包含SIP账户、域名和服务器信息 |- style=" vertical-align:top;" | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | SipProfile.Builder | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 创建SipProfile的帮助类 |-style=" vertical-align:top;" | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | SipSession | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 代表⼀个SIP会话,跟SIP对话框或者⼀个没有对话框的独立事务相关联 |- style=" vertical-align:top;" | style=" border-right:1px solid#ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | SipSession.Listener | style=" border-right:1px solid#ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 关于SIP会话的事件监听器,比如注册⼀个会话(on registering)或者呼出⼀个电话(on calling)的时候 |- style=" vertical-align:top;" | style=" border-right:1px solid#ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | SipSession.State | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 定义SIP会话的声明,比如“注册”、“呼出电话”、“打⼊电话” |- style=" vertical-align:top;" | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | SipRegistrationListener | style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | ⼀个关于SIP注册事件监听器的接⼝ |}* 创建Manifest文件*如果你开发⼀个用到SIP API的应用程序,记住它需要Android2.3(API9)或者更高版本的平台的支持。
所以在你的设备上要运行Android2.3(API9)或者更高的版本,并不是所有的设备都提供SIP的支持。
为了使用SIP,需要添加以下权限到你的manifest文件: * E_SIP * android.permission.INTERNET 为了确保你的应用程序能够安装到支持SIP的设备上,你需要添加以下内容到你应用程序的manifest文件里: * . 这个设置表明你的应用程序需要Android2.3或者更高版本的平台。
详情请参考API Levels和元素相关的文档。
为了控制你的应用程序被那些不支持SIP的设备过滤掉(比如:在Google Play),你需要添加以下内容到你应用程序的manifest文件里: * . 这个设置声明了你的应用程序用到了SIP API。
这个声明还应该包含⼀个android:required 属性来表明你是否想让你的应用程序被那些不提供SIP支持的设备过滤掉。
其他声明你也可能需要,具体取决于你的实现,详情请参考元素相关的文档。
如果你的应用程序设计用来接受呼叫,那么你还必须在应用程序的manifest文件里定义⼀个接收器(BroadcastReceiver 的⼦类): * 以下是从SipDemo项目manifest文件中摘录的内容: ...... ...* 创建⼀个SipManager对象*要想使用SIP API,你的应用程序需要创建⼀个SipManager对象,这个SipManager对象在你的应用程序里负责以下内容:* 发起SIP会话 * 发起和接受呼叫 * 在SIP provider里进行注册和注销 * 验证会话的连通性你可以像下面⼀样实例化⼀个新的SipManager对象: public SipManager mSipManager = null; ... if(mSipManager == null) { mSipManager = SipManager.newInstance(this); }* 在SIP服务器上进行注册*⼀个典型的Android SIP应用中包含⼀个或多个用户,他们中的每个⼈都有⼀个SIP账户。