【问题标题】:TelecomManager.ACTION_CHANGE_DEFAULT_DIALER returns RESULT_CANCELED on huawei P8 LiteTelecomManager.ACTION_CHANGE_DEFAULT_DIALER 在华为 P8 Lite 上返回 RESULT_CANCELED
【发布时间】:2019-04-10 12:17:21
【问题描述】:

我想更改 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 和消息

User declined request to become default dialer

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

【问题讨论】:

    标签: android kotlin default android-dialer


    【解决方案1】:

    如果您在Android Q 或更高版本中运行此代码,它将不起作用。在Q 以下就可以了。要让它在 Android Q 中工作,请尝试以下代码:

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

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

    【讨论】:

      【解决方案2】:

      在针对 Android Q 或更高版本时,您还会收到 RESULT_CANCELED,因为 PermissionPolicyService 会删除该操作。您应该改用 RoleManager.createRequestRoleIntent()。

      【讨论】:

        【解决方案3】:

        尝试在 AndroidManifest 中的 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>
        

        【讨论】:

          【解决方案4】:

          我的方式:

          @SuppressLint("QueryPermissionsNeeded")
          @TargetApi(Build.VERSION_CODES.M)
          fun launchSetDefaultDialerIntent(activity: AppCompatActivity) {
              Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER).putExtra(
                  TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME,
                  activity.packageName
              ).apply {
                  if (resolveActivity(activity.packageManager) != null) {
                      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                          val rm: RoleManager? = activity.getSystemService(RoleManager::class.java)
                          if (rm?.isRoleAvailable(RoleManager.ROLE_DIALER) == true) {
                              @Suppress("DEPRECATION")
                              activity.startActivityForResult(
                                  rm.createRequestRoleIntent(RoleManager.ROLE_DIALER),
                                  REQUEST_CODE_SET_DEFAULT_DIALER
                              )
                          }
                      } else {
                          @Suppress("DEPRECATION")
                          activity.startActivityForResult(this, REQUEST_CODE_SET_DEFAULT_DIALER)
                      }
                  } else {
                      activity.toastShort(R.string.no_contacts_found)
                  }
              }
          }
          

          然后直接在Activity中使用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-03-06
            • 2017-01-27
            • 2016-02-12
            • 2021-01-03
            • 1970-01-01
            • 2019-04-20
            • 2019-08-03
            相关资源
            最近更新 更多