问题标签 [android-connectionservice]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
109 浏览

android - 如何创建一个启用了 SCHEME_SIP uri 且在重启时不会被删除的 PhoneAccount?

我在 android 上构建了一个 WebRTC 软电话客户端(使用 React Native),但该服务使用正确的 uri 进行拨号(不仅仅是电话号码),所以为了获得连接服务集成,我们使用了 PhoneAccount,我将允许的 uri 类型设置为包括SCHEME_SIP - 没有它,我无法使用 tel: uri 拨号,因为它没有遵循正确的格式 - 弹出 UI 警报告诉我。

一切都很好,一切正常,直到手机重新启动并且 PhoneAccount 从列表中消失,如果不再次打开应用程序并启用 PhoneAccount,我们将无法再拨打/接听电话。

我使用一个名为 react-native-callkeep 的项目来处理 callkit/connection 服务,您可以在下面看到我添加对 SIP uris 支持的补丁。

https://github.com/AGProjects/sylk-mobile/blob/master/patches/react-native-callkeep%2B4.0.1.patch#L123

所以是的,在重新启动之前一切都很好,并且 adb 在重新启动期间显示这些日志。

经过一番谷歌搜索后,您将...

https://android.googlesource.com/platform/packages/services/Telephony/+/a294ae5342410431a568126183efe86261668b5d/sip/src/com/android/services/telephony/sip/SipAccountRegistry.java#126

因此,如果您的电话帐户附加了一个 SIP 方案,而您没有附加相应的 SipProfile,则您的呼叫帐户/电话帐户将被删除......很有用。

因此,我创建了一个名称与电话帐户 ID 相同的 sip 配置文件……但看起来它没有保存在 SipProfileDb 中(在该代码中引用)……然后重新启动当然,它不在数据库中进行检查……我们绕着圈子转。据我所知,我无法访问该 sipPorofileDb 及其纯粹用于在本机电话应用程序的设置 UI 中创建的帐户。

A) 我可以将 SipProfileDb 引入我的代码并保存到其中吗?如果要这样做;那为什么我找不到任何文档呢?

B)如果我不能,我错过了什么?我可以创建一个启用了 SIP uri 的 PhoneAccount,因为它只能被电信服务删除,这非常奇怪,感觉就像一个错误。

0 投票
1 回答
1488 浏览

android - android.permission.BIND_TELECOM_CONNECTION_SERVICE 权限被拒绝

我想为 Voip 拨号器应用程序实现“android.telephony”库。所以根据这个https://developer.android.com/reference/android/telecom/ConnectionService我正在尝试注册PhoneAccount。我正在像下面那样做,

尽管我已经包含了许可,但我得到了以下异常

显现,

像这样实现运行时权限https://stackoverflow.com/a/40490990/11630822

我对 BIND_TELECOM_CONNECTION_SERVICE 权限的请求被拒绝。

不知道这是什么原因。

提前致谢。

0 投票
1 回答
236 浏览

android - 在 ConnectionService.onCreateIncomingConnection 中调用 TelecomManager.addNewIncomingCall 时如何接收传入的 Bundle 'extras'?

我正在尝试使用 Android 的 ConnectionService 创建一个呼叫应用程序。我可以成功接听电话,但我试图通过 TelecomManager.addNewIncomingCall 中的“extras”参数传递应用程序特定的数据。但是,当我在 ConnectionService 类中实际创建 Connection 对象时,我找不到访问我设置和传入的 Bundle 的位置。

当我检查 onCreateIncomingConnection(PhoneAccountHandle connectionManagerPhoneAccount, ConnectionRequest request) 中的传入参数时,connectionManagerPhoneAccount.getExtras() 或 request.getExtras() 都不是我传递给 TelecomManager.addNewIncomingCall 的额外参数。

有没有人在将它传递给 TelecomManager.addNewIncomingCall 后设置和检索这个额外的对象?

我正在尝试将呼叫的电话号码传递给 Connection 对象,以便我可以正确解析来自设备联系人的呼叫者 ID 并显示它。

代码:

0 投票
1 回答
270 浏览

android - Android 获取 Wifi 连接状态

我目前正在使用NetworkRequestNetworkCallback方法(由 Google 官方推荐)来获取 Wifi 连接的状态,并且它可以部分工作。

我期待onUnavailable()将在: 时被调用close app -> turn off Wifi -> launch app,但是什么也没发生:

0 投票
0 回答
76 浏览

android - ConnectionService 未从 TelecomManager#placeCall 启动

我需要拦截设备框架发出的呼出事件。
按照android 指南,我停在第 3 点Telecom 子系统绑定到您的应用的 ConnectionService 实现。,也就是我到了这个地步:

呼叫流程

连接服务

显现

问题:调用通过设备框架开始,但从未触发所有服务日志。我的 Android 版本是 10。谢谢

0 投票
0 回答
60 浏览

android - 要求用户解锁屏幕

我正在使用react-native-webrtc/react-native-callkeep

当用户接听来电并且手机被锁定时,是否可以要求用户解锁手机才能打开我的应用程序?和 WhatsApp 一样,当有视频通话时,手机必须解锁才能接听电话

0 投票
1 回答
135 浏览

android - VoIP 通话后 Android 通知无法以正确的音量播放

我已经在原生 Android 应用程序中实现了 VoIP 呼叫,但我们发现了一个我被困住的错误。如果有帮助的话,我将使用 Twilio 进行 VoIP 通话。

如果我从我们的应用程序拨出VoIP 电话,在通话结束后,如果我将应用程序置于后台并收到通知,通知的音量大约是我拨打电话之前的一半。这不仅是来自我的应用程序的通知,而且其他应用程序也受到影响。如果我将我的应用程序从应用程序历史记录中滑出,使其不再在后台运行,则通知将返回以正确音量播放。

当我接到来电时不会发生这种情况,即使我已经验证相同的代码会断开呼叫连接,无论它是传入还是传出。

我已经验证,当通知进来时,设备的通知音量仍然使用 AudioManager 的getStreamVolume(AudioManager.STREAM_NOTIFICATION)API 一直调高。

由于似乎所有应用程序都受到了影响,而不仅仅是我自己的应用程序,我想我可以放心地假设问题不是播放通知声音的代码。我在想也许与 VoIP 通话有关的某些东西没有被正确释放,并且操作系统本身正在以较低的音量播放音调,因为它仍然认为我们正在通话,但我找不到任何证据.

我已经确认我Connection的调用对象是调用onDisconnect(), 和destroy()。我ConnectionService的也被破坏了。通知时的通话状态不是CALL_STATE_OFFHOOK根据TelephonyManager.

您还能想到其他什么会导致通知以降低的音量播放吗?

0 投票
0 回答
75 浏览

android - Android 电信/连接服务:从最近的通话记录中打开应用

我已经能够实现ConnectionServiceAndroid.Telecom接听来电。我在电话应用程序的最近通话中看到了来电显示的电话号码/姓名。当点击与我的应用程序关联的任何号码/名称时,我想打开我的应用程序。当我点击它时,它会显示“为此呼叫选择 sim”,并带有我的网络提供商和我的应用程序的选项。当我点击我的应用程序时,它没有打开我的应用程序。

基本上我想在点击最近通话时打开我的应用程序 - >电话/姓名。那么如何实现呢?

0 投票
1 回答
87 浏览

android - Android呼叫应用程序未重置音频流

我有一个单一的活动应用程序设置为使用自我管理的连接服务,因为我们正在使用音频和视频并且希望能够利用该系统。但是,我们关闭连接或更改音频流的方式导致了一个问题,我将在此处尽我所能描述。

当我开始我们的应用程序的呼叫时,一切都按照我们想要的方式工作,它从免提电话开始,但对免提电话按钮的按钮反应很好,而且音频效果很好!但是,当通话结束时,我的手机卡在了一种模式,即任何通知都不会通过扬声器播放,而是通过听筒播放,这意味着我的所有通知都相当安静。我相信这是因为我们没有正确重置音频流。我不确定这是否意味着在 Connection 对象的 destroy() 中发生,或者在我们请求音频焦点等的 Activity 中发生......下面是我认为是罪魁祸首的代码

此方法初始化音频是从单个 Activity 的 onResume() 调用的。我们根据用户设备的 Build 版本走两条不同的请求路径

所以这里是较新版本的 AudioFocusRequest

这是更过时的 OnAudioFocusChangeListener

最后,我们有从 Activity 中的 onPause() 调用的 tearDownAudio() 方法

我的猜测是问题出在 tearDownAudio() 方法的某个地方,因为设备上的音频在开始和通话期间工作得很好,但在通话结束后没有返回到正常流。

由于我们使用的是自我管理的连接服务,因此 ConnectionService 实现中也可能存在问题,但我的第一直觉是上面的代码是问题所在。

0 投票
1 回答
134 浏览

android - 如何检查 Android 应用程序是在前台、后台运行还是被杀死?(API 级别 27+)

我的 Android 应用程序中有这个代码片段,用于检查应用程序是否被杀死。

但是,这个片段也为后台的应用程序返回“true”,这不是有意的。

在此处输入图像描述

你们中的任何人都可以为我提供一个代码片段来满足上述所有情况吗?