我想更改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和消息“用户拒绝了成为默认拨号程序的请求” 无法为此找到任何解决方案。任何帮助将不胜感激。
答案 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);
它将弹出应用选择器对话框。