Pro*_*aos 11 android telecommunication android-6.0-marshmallow android-7.0-nougat
我正在尝试创建一个新的PhoneAccount来使用我的ConnectionService实现.在文档中,它说我需要在TelecomManager中注册一个新的PhoneAccount,然后在我的手机应用程序的设置中选择它.
这是我的代码:
TelecomManager telecomManager = (TelecomManager) getSystemService(Context.TELECOM_SERVICE);
ComponentName componentName = newComponentName("se.example.connectionservicestandalonetest", "se.example.connectionservicestandalonetest.MyConnectionService");
PhoneAccountHandle phoneAccountHandle = new PhoneAccountHandle(componentName, "Admin");
PhoneAccount phoneAccount = PhoneAccount.builder(phoneAccountHandle, "Admin").build();
telecomManager.registerPhoneAccount(phoneAccount);
Run Code Online (Sandbox Code Playgroud)
如您所见,它创建了一个新的ComponentName,指向我的ConnectionService实现,然后创建一个新的PhoneAccountHandle,我提供ComponentName和一个唯一的帐户名.然后我在PhoneAccount构建中提供PhoneAccountHandle,以及标签(名称?),以创建新的PhoneAccount.最后,我在telecomManager中注册了该帐户.
当我打开手机应用程序时,没有任何改变.我看不到我可以改变PhoneAccount的地方......有什么想法吗?
谢谢!
我得到一些信息,我将在这里留下来作后代。
在构建自己的电话时,如果您自己拨打和接听电话,或者要使用内置电话拨打或接听电话,则PhoneAccount必须添加。没有任何一个,您将不会出现在UI中。CAPABILITY_CALL_PROVIDERCAPABILITY_CONNECTION_MANAGERPhoneAccount
据我所知,没有专用的API可以检查用户是否启用了您的PhoneAccount。但是,您可以使用TelecomManager。addNewIncomingCall以此目的。只需提供一个Bundle包含布尔值的扩展名(命名为您想要的任何名称),然后将该布尔值设置为true如果您确实要接听电话或false只是想进行权限检查(反之亦然)。然后您执行ConnectionService。onCreateIncomingConnection可以检查您的多余物品并退货Connection。createCanceledConnection如果您只是在进行权限检查。这不会在通话记录中注册为通话,并且铃声永远不会播放。addNewIncomingCall如果PhoneAccount未启用您的功能,则会抛出该错误;如果已启用,则将成功。
如以上注释中所述,您可以提示用户启用您的PhoneAccount使用TelecomManager。ACTION_CHANGE_PHONE_ACCOUNTS。由于用户可以随时启用或禁用您的权限PhoneAccount,因此所有需要启用的操作PhoneAccount(如addNewIncomingCall)都应放在一个try块中。
这里有更多信息,可能对其他人有帮助。配置好手机账号后,用户需要为你的应用开启权限。让用户进入该屏幕应该更容易。我只看到 TelecomManager.ACTION_CHANGE_PHONE_ACCOUNTS 操作,但它不会带您到正确的屏幕来启用权限。启动该活动后,您必须选择“所有呼叫帐户”。
如果您想将用户直接带到“呼叫帐户”屏幕,我发现此 Intent 会将您带到那里。
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.android.server.telecom","com.android.server.telecom.settings.EnableAccountPreferenceActivity"));
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
我已经用摩托罗拉 G5S Plus 对此进行了测试,它也应该适用于大多数库存设备,如 Nexus 和 Pixel 设备。我不确定它是否适用于三星设备。
| 归档时间: |
|
| 查看次数: |
4075 次 |
| 最近记录: |