自 API 21 以来,Google 一直在添加功能android.电信总体而言,特别是通过实施更多成员电信经理并添加通话服务。最后一个应该允许非系统、第三方应用程序提供和替换系统呼叫应用程序通话中屏幕的功能 - 弹出并允许执行操作的窗口EXTRA_STATE_OFFHOOK
or EXTRA_STATE_RINGING
广播(即传入和传出的电话)。
目前,只有此屏幕可以通过根限制的方式完全控制振铃和活动呼叫以及具有细粒度信息的关联系统回调。MODIFY_PHONE_STATE
权限和许多安全的 AOSP 代码甚至无法通过反射访问。值得注意的是,它是不同制造商的 ROM 版本中变化最大的代码片段之一,包括启动器、联系人和摄像头。
这一切都非常漂亮,但是......
如何实际开发第 3 方 InCallService?
Namely:
- 您如何获得 GSM 呼叫的通知并获取实例
- 如何接听这些电话
- 这个类的回调的生命周期是怎样的
- 谷歌是否提供了我没有找到的任何实际教程
我不会立即询问所有这些问题的答案,但任何一个答案都可能与其他问题相关联。这是广泛的,但本质上它需要如此:除了 AOSP 代码之外,我在网上没有遇到任何示例,并且该代码基于 root 权限的假设,这使得它无法用于第 3 方应用程序开发目的。
您如何获得 GSM 呼叫的通知并获取实例
首先,用户需要选择您的应用程序作为默认的电话应用程序。参考使用 InCallService 替换 Android 6 和 7 上的默认电话应用程序寻找一种方法来做到这一点。
您还需要定义一个InCallService系统将绑定到实现并通知您有关调用的信息:
<service
android:name=".CallService"
android:permission="android.permission.BIND_INCALL_SERVICE">
<meta-data
android:name="android.telecom.IN_CALL_SERVICE_UI"
android:value="true" />
<intent-filter>
<action android:name="android.telecom.InCallService" />
</intent-filter>
</service>
在那里你至少应该处理onCallAdded(设置监听器Call
,启动您的 UI - 活动 - 用于通话)并onCallRemoved(删除听众)。
如何接听这些电话
如果用户想要接听电话,则需要调用该方法Call#answer(int) with VideoProfile.STATE_AUDIO_ONLY例如。
这个类的回调的生命周期是怎样的
查看Call.Callback对于一次调用可能发生的事件。
谷歌是否提供了我没有找到的任何实际教程
我不了解谷歌,但你可以看看我的简化示例https://github.com/arekolek/simple-phone
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)