android - 如何在 Android 9+ 中以编程方式接听或拒绝来电?
问题描述
我正在制作一个以编程方式接受来电而不是默认呼叫应用程序的应用程序。在 Android 9 及更低版本中,使用tm.acceptRingingCall()
和更容易实现tm.endCall
。不幸的是,从 Android 10 开始,这些方法已被弃用。根据文档,可以使用InCallService
API 来完成。但是,如果不是默认调用应用程序,是否可以做到这一点?
解决方案
不幸的是,答案是否定的。从 Android 10 开始,处理电话的唯一方法是使用InCallService
API。我用 java 制作了一个基本的拨号器应用程序,它解释了如何将呼叫作为默认拨号器应用程序处理的基础知识(链接:https ://github.com/adnan-creator/java-custom-dialer )。因此,目前最好的解决方案是成为默认拨号器应用程序,直到您需要以编程方式接受或拒绝呼叫的功能。然后,您可以将控件传输回内置拨号器应用程序。
这可以通过在使用
telecomManager.getDefaultDialerPackage()
.
然后可以将控件传递回内置的拨号器应用程序
Intent intent = (new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER))
.putExtra(
TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME,
storedPackageName);
this.startActivityForResult(intent, REQUEST_CODE_SET_DEFAULT_DIALER);
推荐阅读
- python - 使用另一个类中的按钮打开现有类
- batch-file - 如何处理批处理文件中 UNC 路径中的空间?
- javascript - Discord.js 从特定公会中删除用户角色
- azure-ad-b2c - 来自 azure-ad-b2c 用户旅程上下文提供程序的用户位置详细信息
- git - Git Worktree 莫名其妙地损坏了
- next.js - WaveSurfer.create 不是函数
- python-3.8 - opencv pycharm ide python中的图像显示问题
- git - git 重置为上一次提交,然后推送
- multi-factor-authentication - 如何制作 Authenticator App 智能 URL
- android - 为什么 Environment.getExternalStorageDirectory() 在缓存文件夹中创建目录