电话通信功能知识总结
Posted zdj_develop
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了电话通信功能知识总结相关的知识,希望对你有一定的参考价值。
·sip固话
·移动双呼
·手机系统电话程序功能
·将我们的通话能力开放出去,第三方APP可以通过调用API调起我们的APP,进行拨打电话。
一、sip固话
我们使用的是PJSIP。原生安卓系统自带的SIP是很不靠谱的,我们自己测试过,这是因为很多手机厂商对这一块进行了阉割,所以我们采用PJSIP。PJSIP的官网:PJSIP - Open Source SIP, Media, and NAT Traversal Library
1、sip协议:
Session initialization Protocol(会话初始协议)是由IETF(Internet Engineering Task Force,因特网工程任务组)制定的多媒体通信协议。它是一个基于文本的应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。
2、PJSIP:
PJSIP是一个开放源代码的SIP协议栈,它支持多种SIP的扩展功能。它实现了SIP、SDP、RTP、STUN、TURN和ICE。PJSIP作为基于SIP的一个多媒体通信框架提供了非常清晰的API,以及NAT穿越的功能。PJSIP具有非常好的移植性,几乎支持现今所有系统:从桌面系统、嵌入式系统到智能手机。PJSIP同时支持语音、视频、状态呈现和即时通讯。
优点:
1、高度的可移植性
2、极小的内存需求
3、高效的性能
4、支持多种SIP功能及扩展功能
多种SIP功能和扩展功能,例如多人会话,事件驱动框架,会话框架,即时信息,电话传输。
3、如何使用PJSIP:
(1)NDK开发,编译生成so库文件。
(2)把我们生成的so库文件拿到项目中,放在jniLibs文件夹下。
(3)pjsip的初始化:
包括加载so库、创建端点、创建sip传输、启动库、注册等等。
我们这里是写了一个服务,当我们从服务器获取到sip信息后,我们开启这个服务,在这个服务中完成这些事情。
(4)对于sip的操作,我们封装了一个Utils_pjsip这样一个工具类。包括使用pjsip进行呼出,使用pjsip进行接听,使用pjsip进行挂断等等。
二、移动双呼
首先解释下什么是移动双呼:
移动:指移动端号码,也就是手机卡(sim卡)。
双呼:对应双呼系统。双呼系统,A与B进行通话,不是直接进行通话,而是经过双呼系统。类似于美团骑士、饿了么骑士给客户打电话就是这样一个模式。双呼系统的意义在于它能够提供增值服务,比如号码隐藏、通话记录、录音等等。
1、实现:
APP端,就是调用后端的移动双呼接口,当后端返回success的时候,即表示接口调用成功。然后就是等中间号码打过来,然后这边进行接听,然后实现A与B的通话。
2、补充功能:
当用户将我们的APP设置为手机系统默认电话程序后,当移动双呼接口调用成功后,我们会弹出一个“响应中...”的界面,当中间号码打过来后,我们会弹出通话界面,并直接给用户自动接听,然后用户就与另一端通话了。
三、手机系统电话程序功能
就是说在我们的APP中实现了手机默认电话程序的功能。
实现这个主要步骤有以下几大点:
1、将我们的程序声明成一个电话程序。
怎么声明呢?通过在清单文件中注册一个Activity,并且设置action为dial,设置data中的scheme为tel。
2、我们用到了一个Service,即InCallService,它是android.telecom包中的一个类,是Service的派生类。
那么,我们用这个类干嘛呢?我们写一个类,继承InCallService,然后在这个类里面,监听电话通信状态。比如说有电话添加,有电话移除,接听电话,挂断电话。
如果有电话添加,会进onCallAdded回调;如果有电话移除,会进onCallRemoved回调;如果接听电话,会进onStateChanged回调,并且我们能够得到相应的状态(STATE_ACTIVE);如果挂断电话,会进onStateChanged回调,并且我们能够得到相应的状态(STATE_DISCONNECTED)。
3、我们需要封装一个工具类或者说一个管理器,里面包括了一系列的对电话操作的方法,比如说:
打电话、接听电话、挂断电话、指令输出等等。
另外这里再说一下怎么将我们的APP设置为系统默认电话程序,Android 6.0~Android 10.0(包括Android 6.0,不包括Android 10.0)通过TelecomManager,Android 10.0以上(包括Android 10.0)通过RoleManager。
更多关于手机系统电话程序功能的资料可以移步我的另外一篇博客:
Android Telephone_zdj_Develop的博客-CSDN博客
四、将我们的通话能力开放出去
我们这里是通过隐式意图这种方案,提供出我们的API,这样子我们的合作伙伴或者说需要接入我们这个能力的第三方,使用我们的API调起我们的APP进行通话。
以上是关于电话通信功能知识总结的主要内容,如果未能解决你的问题,请参考以下文章