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

时间:2019-04-10 12:17:21

标签: android kotlin default android-dialer

我想更改Android默认拨号器,并要制作自己的自定义拨号器。为此,我选择了这个GIthub repo作为启动项目。这在所有其他手机上均能正常工作,并在华为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()
    }

StertActivityforResult返回,带有RESULT_CANCELED和消息“用户拒绝了成为默认拨号程序的请求” 无法为此找到任何解决方案。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

在Android Q或更高版本上定位时,您还会获得RESULT_CANCELED,因为PermissionPolicyService会删除该Action。您应该改用RoleManager.createRequestRoleIntent()。

答案 1 :(得分:1)

尝试在AndroidManifest的“活动”中添加一些意图过滤器。

<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>

答案 2 :(得分:1)

如果您在Android Q或更高版本中运行此代码,它将无法正常工作。低于Q,就可以了。要使其在Android Q中运行,请尝试以下代码:

RoleManager rm = (RoleManager) getSystemService(Context.ROLE_SERVICE);
startActivityForResult(rm.createRequestRoleIntent(RoleManager.ROLE_DIALER), 120);

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