leR*_*bot 17 android gsm telecommunication
从API 21开始,Google一直在为android.telecom添加功能,特别是通过实现更多的TelecomManager成员和添加InCallService.最后一个应该允许非系统的第三方应用程序提供和替换系统Calls app in-call屏幕的功能 - 弹出的窗口允许操作EXTRA_STATE_OFFHOOK或EXTRA_STATE_RINGING广播(即传入和传出的电话呼叫) ).
目前,只有这个屏幕可以完全控制振铃和活动呼叫以及具有细粒度信息的相关系统回调,通过根限制MODIFY_PHONE_STATE权限和许多安全的AOSP代码甚至无法通过反射访问.它特别是不同制造商的ROM风格中最变化的代码之一,以及发射器,触点和相机.
这一切都非常漂亮,但......
你如何实际开发第三方InCallService?
即:
我不会立刻问所有这些问题的答案,但任何一个答案都可能与其他问题有关.这是广泛的,但本质上它需要是:在网络上没有任何例子我偶然发现了AOSP代码,而且该代码基于root权限的假设,这使得它无法用于第三方应用程序开发目的.
首先,用户需要选择您的应用作为默认的手机应用.有关这种方法,请参阅使用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>
Run Code Online (Sandbox Code Playgroud)
在那里你应该至少处理onCallAdded(设置监听器Call,启动你的UI - 活动 - 用于调用)和onCallRemoved(删除监听器).
如果用户想接听电话,你需要调用方法Call#answer(int)与VideoProfile.STATE_AUDIO_ONLY例如.
查看Call.Callback单个呼叫可能发生的事件.
我不知道谷歌,但你可以查看我的简化示例https://github.com/arekolek/simple-phone
请遵循“ 在通话应用中替换”的第二条评论中的建议。另外,您需要一个实现InCallService接口的服务。调用到达时,将调用onCallAdded(Call call)方法,为您提供对调用对象的引用。
<service
android:name=".InCallServiceImplementation"
android:enabled="true"
android:exported="true"
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>
Run Code Online (Sandbox Code Playgroud)
有了call对象后,回答就像call.answer()一样简单。我建议,当您使这些工作正常进行时,请运行几个测试调用以了解何时调用了不同的回调。
关于教程,我在研究时找不到任何东西,但是那是一年多以前的事了……
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
20123 次 |
| 最近记录: |