Android网络API(android.net.sip):概览

本文介绍如何使用SIP API发起和接听VOIP音频呼叫,包括获取SipManager实例、创建SipProfile对象及使用SipAudioCall类进行操作。同时提供了必要的监听器和错误处理方法。

提供对会话发起协议(SIP)功能的访问,例如使用SIP进行和应答VOIP呼叫。


有关更多信息,请参阅会话启动协议开发人员指南。


要开始,您需要通过调用newInstance()获取SipManager的一个实例。


使用SipManager,您可以使用makeAudioCall()和takeAudioCall()发起SIP音频通话。 两种方法都需要一个SipAudioCall.Listener,当呼叫的状态发生变化时,例如当呼叫响铃,建立或结束时,SipAudioCall.Listener接收回叫。


makeAudioCall()还需要两个表示本地设备和对等设备的SipProfile对象。 您可以使用SipProfile.Builder子类创建SipProfile。


一旦您有SipAudioCall,您可以使用实例执行SIP音频呼叫操作,例如拨打电话,应答呼叫,静音通话,打开扬声器模式,发送DTMF音调等。


如果要创建通用SIP连接(例如视频通话或其他),可以使用open()从SipManager创建SIP连接。 如果您只想创建音频SIP呼叫,那么您应该使用SipAudioCall类,如上所述。


注意:并非所有Android设备都支持SIP的VOIP功能。 在执行任何SIP活动之前,您应该调用isVoipSupported()来验证设备是否支持VOIP呼叫,并且是ApiSupported()来验证设备是否支持SIP API。 您的应用程序还必须请求INTERNET和USE_SIP权限才能使用SIP API。



一、接口

SipRegistrationListener

SIP注册事件侦听器。



二、类

SipAudioCall

通过SIP处理互联网音频呼叫。


SipAudioCall.Listener

用于与SIP呼叫有关的事件的侦听器,例如当接收到呼叫时(“在振铃”)或呼叫正在发出(“在呼叫”)。


SipErrorCode

定义在SIP操作期间返回的错误代码。


SipManager

为SIP任务提供API,例如发起SIP连接,并提供对相关SIP服务的访问。


SipProfile

定义SIP配置文件,包括SIP帐户,域和服务器信息。


SipProfile.Builder

用于创建SipProfile的Helper类。


SipSession

表示与SIP对话或不在对话框内的独立事务相关联的SIP会话。


SipSession.Listener

用于与SIP会话有关的事件的侦听器,例如当会话被注册时(“在注册”)或呼叫正在发出(“在呼叫”)。


SipSession.State

定义SIP会话状态,如“注册”,“呼出”和“在通话”。



三、异常

SipException

表示一般的SIP相关异常。

当使用 Java 代码调用接口出现 `java.security.cert.CertificateException: No subject alternative names matching IP address` 错误,而 Postman 调用正常时,这通常是由于 Java 对 SSL 证书验证更为严格,要求证书中包含匹配 IP 地址的主题备用名称(Subject Alternative Name,SAN),而 Postman 可能默认忽略了证书验证。以下是几种可能的解决办法: ### 1. 忽略 SSL 证书验证 这种方法不建议在生产环境中使用,因为它会降低安全性,但在开发和测试环境中可以临时使用。 ```java import javax.net.ssl.*; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; public class IgnoreSSLCertificate { public static void main(String[] args) throws IOException, NoSuchAlgorithmException, KeyManagementException { // 创建一个信任所有证书的信任管理器 TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServerTrusted(X509Certificate[] certs, String authType) { } } }; // 安装信任管理器 SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // 创建一个主机名验证器,始终返回 true HostnameVerifier allHostsValid = (hostname, session) -> true; HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); // 发起请求 URL url = new URL("https://10.127.10.171:9004/api/app-api/sip/platform/v2/file/upload"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); // 处理响应 int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode); } } ``` ### 2. 添加 IP 地址到主题备用名称(SAN) 如果可能的话,让服务器管理员更新 SSL 证书,将 IP 地址添加到证书的主题备用名称中。这样 Java 代码在验证证书时就能找到匹配的 IP 地址。 ### 3. 使用主机名代替 IP 地址 如果服务器支持,使用主机名代替 IP 地址进行请求。确保主机名在 DNS 中正确解析,并且证书中包含该主机名的主题备用名称。 ```java import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; public class UseHostname { public static void main(String[] args) throws IOException { // 使用主机名代替 IP 地址 URL url = new URL("https://yourhostname:9004/api/app-api/sip/platform/v2/file/upload"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); // 处理响应 int responseCode = connection.getResponseCode(); System.out.println("Response Code: " + responseCode); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值