TelecomManager.ACTION_CHANGE_DEFAULT_DIALER 在华为 P8 Lite 上返回 RESULT_CANCELED

You*_*ash 4 android default kotlin android-dialer

我想更改 Android 默认拨号器并想制作我自己的自定义拨号器。为此,我选择了这个 GIthub 存储库作为启动项目。这在所有其他手机上运行良好,在 huawei p8 lite 上停止运行。默认弹出消息不会显示将应用程序设置为默认值。这是代码块

private fun checkDefaultDialer() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return

    val telecomManager = getSystemService(TELECOM_SERVICE) as TelecomManager
    val isAlreadyDefaultDialer = packageName == telecomManager.defaultDialerPackage
    if (isAlreadyDefaultDialer) return

    val intent = Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER).putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, packageName)
    startActivityForResult(intent, REQUEST_CODE_SET_DEFAULT_DIALER)
}

private fun checkSetDefaultDialerResult(resultCode: Int) {
    val message = when (resultCode) {
        RESULT_OK -> "User accepted request to become default dialer"
        RESULT_CANCELED -> "User declined request to become default dialer"
        else -> "Unexpected result code $resultCode"
    }
    Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
}
Run Code Online (Sandbox Code Playgroud)

StertActivityforResult返回RESULT_CANCELED和消息

User declined request to become default dialer
Run Code Online (Sandbox Code Playgroud)

找不到任何解决方案。任何帮助将不胜感激。

Tus*_*rul 5

如果您在Android Q上面或上面运行此代码,它将不起作用。它在下面就好了Q。要使其正常工作,请Android Q尝试以下代码:

RoleManager rm = (RoleManager) getSystemService(Context.ROLE_SERVICE);
startActivityForResult(rm.createRequestRoleIntent(RoleManager.ROLE_DIALER), 120);
Run Code Online (Sandbox Code Playgroud)

它将弹出应用程序选择器对话框。


小智 3

尝试在 AndroidManifest.xml 中的 Activity 中添加一些 Intent 过滤器。

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <action android:name="android.intent.action.DIAL"/>

    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>

    <data android:scheme="tel"/>
</intent-filter>
<intent-filter>
    <action android:name="android.intent.action.DIAL"/>

    <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)