首页 > 解决方案 > 我用两个按钮创建了我的自定义来电屏幕。如何让按钮接听并结束通话?

问题描述

我创建了一个自定义来电屏幕,在来电时会被调用,但是我如何处理在我的自定义屏幕中接听和结束通话的操作?

标签: android

解决方案


旁注:请务必阅读开发人员文档,他们大部分时间都会为您提供答案。就连这个

首先,您需要获得拨打和接听此类电话的权限,

允许:

<manifest … >
    <uses-permission android:name="android.permission.MANAGE_OWN_CALLS"/>
</manifest>

然后你需要声明一个服务:

<service android:name="com.example.MyConnectionService"
    android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
    <intent-filter>
        <action android:name="android.telecom.ConnectionService" />
    </intent-filter>
</service>

然后按照以下步骤操作:

完整指南在这里构建一个呼叫应用程序

您的调用应用程序必须提供电信子系统可以绑定到的 ConnectionService 类的实现。您的 ConnectionService 实现应覆盖以下方法:

onCreateOutgoingConnection(PhoneAccountHandle, ConnectionRequest) 电信子系统调用此方法以响应您的应用调用 placeCall(Uri, Bundle) 以创建新的拨出电话。您的应用返回 Connection 类实现的新实例(有关更多信息,请参阅实现连接)来表示新的传出呼叫。您可以通过执行以下操作进一步自定义传出连接:

您的应用程序应调用 setConnectionProperties(int) 方法,并使用 PROPERTY_SELF_MANAGED 常量作为参数来指示连接源自调用应用程序。如果您的应用程序支持暂停呼叫,请调用 setConnectionCapabilities(int) 方法并将参数设置为 CAPABILITY_HOLD 和 CAPABILITY_SUPPORT_HOLD 常量的位掩码值。要设置调用者的姓名,请使用 setCallerDisplayName(String, int) 方法传递 PRESENTATION_ALLOWED 常量作为 int 参数来指示应显示调用者的姓名。为确保呼出具有适当的视频状态,请调用 Connection 对象的 setVideoState(int) 方法并发送 ConnectionRequest 对象的 getVideoState() 方法返回的值。onCreateOutgoingConnectionFailed(PhoneAccountHandle, ConnectionRequest) 当您的应用调用placeCall(Uri, Bundle) 方法并且无法拨出电话时,电信子系统会调用该方法。为了应对这种情况,您的应用程序应通知用户(例如,使用警报框或 toast)无法拨出拨出电话。如果有一个正在进行的紧急呼叫,或者如果另一个应用程序中有一个正在进行的呼叫在您拨打电话之前无法保持,您的应用程序可能无法拨打电话。

onCreateIncomingConnection(PhoneAccountHandle, ConnectionRequest) 当您的应用调用 addNewIncomingCall(PhoneAccountHandle, Bundle) 方法时,电信子系统会调用此方法,以通知系统您的应用中有新的来电。您的应用会返回 Connection 实现的新实例(有关更多信息,请参阅实现连接)来表示新的传入呼叫。您可以通过执行以下操作进一步自定义传入连接:

您的应用程序应调用 setConnectionProperties(int) 方法,并使用 PROPERTY_SELF_MANAGED 常量作为参数来指示连接源自调用应用程序。如果您的应用程序支持暂停呼叫,请调用 setConnectionCapabilities(int) 方法并将参数设置为 CAPABILITY_HOLD 和 CAPABILITY_SUPPORT_HOLD 常量的位掩码值。要设置调用者的姓名,请使用 setCallerDisplayName(String, int) 方法传递 PRESENTATION_ALLOWED 常量作为 int 参数来指示应显示调用者的姓名。要指定来电的电话号码或地址,请使用 Connection 对象的 setAddress(Uri, int) 方法。为确保呼出呼叫具有适当的视频状态,调用 Connection 对象的 setVideoState(int) 方法,发送 ConnectionRequest 对象的 getVideoState() 方法返回的值。onCreateIncomingConnectionFailed(PhoneAccountHandle, ConnectionRequest) 当您的应用调用 addNewIncomingCall(PhoneAccountHandle, Bundle) 方法通知 Telecom 有新来电,但不允许来电时,电信子系统会调用此方法(有关详细信息,请参阅呼叫约束) . 您的应用程序应静默拒绝来电,可选择发布通知以通知用户未接来电。Bundle) 方法来通知 Telecom 有新的来电,但不允许来电(有关详细信息,请参阅呼叫限制)。您的应用程序应静默拒绝来电,可选择发布通知以通知用户未接来电。Bundle) 方法来通知 Telecom 有新的来电,但不允许来电(有关详细信息,请参阅呼叫限制)。您的应用程序应静默拒绝来电,可选择发布通知以通知用户未接来电。


推荐阅读