【问题标题】:Set my app as the default Dialler not asking options in Android 10 (Q)?将我的应用设置为默认拨号器而不询问 Android 10 (Q) 中的选项?
【发布时间】:2020-06-27 19:04:30
【问题描述】:

我目前无法让我的应用向用户发送对话框以在 API 29 上设置默认拨号器,但相同的代码在 Android 10 (Q) 下运行良好。

我也测试了这个No response from intent to prompt user to set default handler for SMS 示例,但不适用于我的示例。然后我关注了https://developer.android.com/guide/topics/permissions/default-handlers,但没有解决我的问题。 API 级别 29 或更高版本是否有任何特殊更改以让用户设置默认应用程序?

这是我的工作代码(适用于 Android 10 以下)

TelecomManager telecomManager = (TelecomManager) getSystemService(TELECOM_SERVICE);
        if (!getPackageName().equals(telecomManager.getDefaultDialerPackage())) {
            Intent intent = new Intent(ACTION_CHANGE_DEFAULT_DIALER)
                    .putExtra(EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, getPackageName());
            startActivity(intent);
        }

我在 logcat 中得到的就在这里

【问题讨论】:

    标签: android android-intent android-permissions telephonymanager android-10.0


    【解决方案1】:

    是的,API 发生了变化,请在此处查看上一个 API 中的注释: https://developer.android.com/reference/android/telecom/TelecomManager#ACTION_CHANGE_DEFAULT_DIALER

    并在此处查看新 API: https://developer.android.com/reference/android/app/role/RoleManager

    基本上,您需要执行以下操作:

    RoleManager roleManager = (RoleManager) getSystemService(Context.ROLE_SERVICE);
    Intent intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_DIALER);
    startActivityForResult(Intent, CHANGE_DEFAULT_DIALER_CODE); // you need to define CHANGE_DEFAULT_DIALER as a static final int
    

    然后你通过在你的活动中实现onActivityResult来捕捉响应。

    【讨论】:

    • 感谢您的指导。我在createRequestRoleIntent 收到编译时错误Non-static method 'createRequestRoleIntent(java.lang.String)' cannot be referenced from a static context。能帮帮我,为什么我会得到这个?
    • 我在this 的帮助下解决了这个问题,但方向是你的。信用归你所有。太感谢了。我没有话要感谢你。我被困了 14 天。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2016-05-19
    相关资源
    最近更新 更多