gpt4 book ai didi

android - OutgoingCall 的连接服务实现

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:57:17 29 4
gpt4 key购买 nike

我正在尝试实现 ConnectionService、PhoneAccount 和 PhoneAccountHandle,以便获得断开拨出调用的断开连接原因(例如,用户拒绝调用、无法接通等)到目前为止,我已经能够使用 customPhoneAccount 发起调用,但该电话从未接通,因此我无法得到响应。

这是我到目前为止编写的代码:
register() 是从我的 Activity 中调用以注册 phoneAccount 的方法:

public void register() {
TelecomManager manager = (TelecomManager) getSystemService(TELECOM_SERVICE);
PhoneAccountHandle phoneAccountHandle = new PhoneAccountHandle(
new ComponentName(getPackageName(),
MyConnectionService.class.getName()), "myConnectionServiceId");
PhoneAccount.Builder builder = PhoneAccount.builder(phoneAccountHandle, "CustomAccount");
builder.setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER | PhoneAccount.CAPABILITY_CONNECTION_MANAGER);
PhoneAccount phoneAccount = builder.build();
manager.registerPhoneAccount(phoneAccount);
}

call()方法发起调用:

 public void call() {
TelecomManager manager = (TelecomManager) getSystemService(TELECOM_SERVICE);
PhoneAccountHandle phoneAccountHandle = new PhoneAccountHandle(
new ComponentName(getPackageName(),
MyConnectionService.class.getName()), "myConnectionServiceId");
Bundle test = new Bundle();
test.putParcelable(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
manager.placeCall(Uri.parse("tel:" + "1212312312"), test);
}

这是 MyConnectionService:

public class MyConnectionService extends ConnectionService {

public static final String TAG = MyConnectionService.class.getName();
@Override
public int onStartCommand(Intent intent,int flags, int startId) {
Log.d(TAG, "On Start");
return super.onStartCommand(intent, flags, startId);
}

@Override
public Connection onCreateOutgoingConnection(PhoneAccountHandle connectionManagerPhoneAccount, ConnectionRequest request) {
Connection connection = super.onCreateOutgoingConnection(connectionManagerPhoneAccount, request);
Log.d(TAG, connection.getDisconnectCause().getReason());
return connection;
}

@Override
public void onCreateOutgoingConnectionFailed(PhoneAccountHandle connectionManagerPhoneAccount, ConnectionRequest request) {
if (request != null) {
Log.d(TAG, request.toString());
}
super.onCreateOutgoingConnectionFailed(connectionManagerPhoneAccount, request);
}

我尝试了不同的功能以及与 ConnectionService 相关的其他线程中提到的所有选项,但无法获得预期的结果,有人可以帮助我吗?

最佳答案

一些事情:

  1. 您不应使用 PhoneAccount.CAPABILITY_CONNECTION_MANAGER,它有特殊用途,不适用于您的用例并且需要特殊权限。

  2. 您的onCreateOutgoingConnection 方法不应调用 super 版本;该方法是 ConnectionService 基类中的空白方法。 Telecom 调用您对 onCreateOutgoingConnection 的覆盖,以便您可以提供一个新的 Connection 实例。

看看 Android 开源 TestConnectionService 类;它实现了一个简单的 ConnectionService: https://android.googlesource.com/platform/packages/services/Telecomm/+/master/testapps/src/com/android/server/telecom/testapps/TestConnectionService.java

关于android - OutgoingCall 的连接服务实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44779410/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com