使用 android.telecom 和 InCallService 接听来电

2023-11-26

自 API 21 以来,Google 一直在添加功能android.电信总体而言,特别是通过实施更多成员电信经理并添加通话服务。最后一个应该允许非系统、第三方应用程序提供和替换系统呼叫应用程序通话中屏幕的功能 - 弹出并允许执行操作的窗口EXTRA_STATE_OFFHOOK or EXTRA_STATE_RINGING广播(即传入和传出的电话)。

目前,只有此屏幕可以通过根限制的方式完全控制振铃和活动呼叫以及具有细粒度信息的关联系统回调。MODIFY_PHONE_STATE权限和许多安全的 AOSP 代码甚至无法通过反射访问。值得注意的是,它是不同制造商的 ROM 版本中变化最大的代码片段之一,包括启动器、联系人和摄像头。

这一切都非常漂亮,但是......

如何实际开发第 3 方 InCallService?

Namely:

  1. 您如何获得 GSM 呼叫的通知并获取实例
  2. 如何接听这些电话
  3. 这个类的回调的生命周期是怎样的
  4. 谷歌是否提供了我没有找到的任何实际教程

我不会立即询问所有这些问题的答案,但任何一个答案都可能与其他问题相关联。这是广泛的,但本质上它需要如此:除了 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(使用前将#替换为@)

使用 android.telecom 和 InCallService 接听来电 的相关文章

随机推荐

  • 您可以在 Emacs Lisp 宏中创建交互式函数吗?

    我正在尝试在 emacs lisp 中编写一个宏来创建一些 辅助函数 最终 我的辅助函数将比我这里的更有用 我意识到可能有更好 更直观的方法来完成同样的事情 请发帖 但我的基本问题是为什么这不起作用 我做错了什么 defmacro deft
  • Angular:禁用整个类(服务或组件)的更改检测器

    如果通常导致更改检测运行的事件 setTimeout setInterval 浏览器事件 ajax 调用等 来自特定类 服务或组件 有没有办法完全禁用 Angular 的更改检测器 也就是说 当我发现setInterval在我的服务中注册会
  • 在 Elastic Beanstalk 中运行 cron 作业

    因此 我在 Django Elastic Beanstalk 应用程序中有一个功能 其工作原理如下 下载文件 解析文件 使用文件中的数据运行对 API 的一些调用 使用新数据更新 EB 实例的数据库 在测试实例中 我刚刚设置了本地 cron
  • NSSegmentedControl 颜色

    我想要一个 NSSegmentedControl 的子类 其中各个段具有不同的颜色 我尝试对 NSSegmentedControl 进行子类化并添加以下代码 void drawRect NSRect dirtyRect NSColor co
  • 重新定义golang中的const进行测试

    我正在为服务编写一个 http 客户端 并且为了测试我想使用net http httptest服务器而不是调用远程 API 如果我做到了 我可以轻松做到这一点baseUrl一个全局变量 设置为我的测试服务器的 url 然而 这使得生产代码更
  • 在 Delphi 2009 中我需要释放变体数组吗?

    如果我有一个只包含简单类型的变体数组 以及可能的简单类型的进一步变体数组 我是否需要执行任何显式操作来释放内存 或者这一切都为我处理好了 我一直以为没什么可做的 但我只是有一点疑问 变体是托管类型 它们由编译器的引用计数系统拥有 不需要手动
  • ios 延迟位置更新无法延迟

    我正在考虑对 iOS 活动跟踪器使用延迟位置更新 它允许在后台提供位置服务 我已经实现了建议的代码片段 见下文 在 Xcode 调试中 延迟位置会尝试启动几次 直到位置数据以大约每秒 1 次的速度传入 之后 它声称启动延迟成功 并且在指定时
  • .NET foreach 语句是否保证按照集合的构建顺序迭代集合?

    一位同事在他编写的一些 C 代码中使用了 for 循环来迭代 List 并留下了评论 没有使用 For Each 因为我不确定它是否按顺序迭代 谁知道 Microsoft 会做什么 例如 假设我们有一个像这样构建的列表 var someLi
  • 如何让Java注册一个带有空格的字符串输入?

    这是我的代码 public static void main String args Scanner in new Scanner System in String question question in next if question
  • 数据建模:逻辑建模练习

    在尝试学习数据存储艺术的过程中 我一直在尝试获取尽可能多的可靠信息 PerformanceDBA 在以下帖子中发布了一些非常有用的教程 示例 我的数据标准化了吗 and 关系表命名约定 我已经问过这个模型的一个子集问题here 因此 为了确
  • yocto:如何安装命令 locale 和 localedef?

    如何在 yocto 项目中为我的图像安装命令 locale 和 localedef 我已尝试以下操作 IMAGE INSTALL append glibc locale 但这不起作用 我该怎么做 locale位于一个名为glibc util
  • 了解 PKCE 与授权代码授予的优势

    我是 OAuth 世界的新手 我试图了解使用 PKCE 相对于传统授权代码授予的好处 我的许多假设可能是错误的 所以感谢您的指正 我是一名移动应用程序开发人员 根据 OAuth 文档 客户端机密不能在公共客户端的应用程序代码中进行硬编码 避
  • firebase云函数中的权限被拒绝

    在 firebase 云功能中 我在读取或写入实时数据库时在 admin firebase 上被拒绝访问 这https github com firebase firebase functions issues 16没有解决我的问题 App
  • DRF 中的动作装饰器不适用于 url_path

    我正在努力实现这样的终点 api messages
  • 为什么我不能使用urlencode编码json格式数据?

    我有一个关于 python 2 7 中的 urlencode 的问题 gt gt gt import urllib gt gt gt import json gt gt gt urllib urlencode json dumps titl
  • 实现 47 度 android-swipelistview 用于滑动 android ListViewItem

    实际上我的目标是在android中实现ListViewItem Swipe 我已经尝试过了 stackoverflow 有几个可以让你的 ListViewSwipe 的例子 例子 简单的滑动手势活动教程 从列表视图中滑动一项时在列表视图中显
  • 将程序加载到 RAM 并执行它们 NASM 16b

    我迫切需要解决这个问题 我正在尝试开发汇编代码 允许我加载和执行 通过用户的输入 2 个其他 Assembly EXE 程序 我有两个问题 我似乎无法将路径名分配给有效的寄存器 或者可能是错误的语法 我需要能够在第一个程序 可能是 开始执行
  • Python 对象删除自身

    为什么这不起作用 我正在尝试使类的实例删除自身 gt gt gt class A def kill self del self gt gt gt a A gt gt gt a kill gt gt gt a lt main A instan
  • SPA 中刷新令牌 Cookie 的 CSRF 保护

    我在 AngularJS SPA 中使用资源所有者密码凭据 OAuth 2 0 流程 有几篇文章 here here 以及答案这个问题这说明我们不应该将刷新令牌存储在 Web 客户端 LocalStorage 上 而是将它们加密存储在 Ht
  • 使用 android.telecom 和 InCallService 接听来电

    自 API 21 以来 Google 一直在添加功能android 电信总体而言 特别是通过实施更多成员电信经理并添加通话服务 最后一个应该允许非系统 第三方应用程序提供和替换系统呼叫应用程序通话中屏幕的功能 弹出并允许执行操作的窗口EXT