Android Q RoleManager:更改默认的短信应用程序处理程序

3
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
        RoleManager roleManager = context.getSystemService(RoleManager.class);
        // check if the app is having permission to be as default SMS app
        boolean isRoleAvailable = roleManager.isRoleAvailable(RoleManager.ROLE_SMS);
        if (isRoleAvailable){
            // check whether your app is already holding the default SMS app role.
            boolean isRoleHeld = roleManager.isRoleHeld(RoleManager.ROLE_SMS);
            if (isRoleHeld){
                Intent roleRequestIntent = roleManager.createRequestRoleIntent(RoleManager.ROLE_SMS);
                ((AppCompatActivity)context).startActivityForResult(roleRequestIntent, ConstantsValues.REQUEST_CODES.REQUEST_RESET_SMS_HANDLER);
            }
        }
    }else if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
        Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
        intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, Custom_SharedPreference.getInstance(context).getDefaultSMSPackage());
        ((AppCompatActivity)context).startActivityForResult(intent, ConstantsValues.REQUEST_CODES.REQUEST_RESET_SMS_HANDLER);
    }

当我把短信应用更改为MyApp默认处理程序时,这个功能正常工作。但是当我再次将MyApp更改为默认的短信应用程序时,它就无法工作了,并且activityResult返回0 Activity.Cancle。 这只在Android Q上发生,其他版本都正常。


你添加了什么权限? - Nithis Kumar
如果(isRoleHeld)或如果(!isRoleHeld)? - Goltsev Eugene
你添加了什么权限?
这是为了更改默认短信处理程序权限。
- Jatin Singh
如果(isRoleHeld)或者如果(!isRoleHeld),该怎么办?
第一次分配处理程序时,使用(isRoleHeld)可以正常工作,但在完成工作后,我想分配以前的处理程序,即SMS的默认处理程序,然后它就无法工作了。
- Jatin Singh
有相同的问题,有人找到了解决这个问题的方法吗?收到用户投诉不再被要求恢复旧的默认短信应用程序! - 3c71
1个回答

1
简而言之,无法恢复默认的短信应用程序。
为了解决这个问题,我决定使用以下代码打开以前的默认短信应用程序:
runIntent = getPackageManager().getLaunchIntentForPackage(newDefaultSmsApp);

我遇到了同样的问题,尝试了各种解决方法,例如使用旧方法请求更改默认短信应用程序,但操作系统根本不在意。使用RoleManager时,当请求将角色“还原”为默认/上一个短信应用程序时,日志显示如下:

2021-06-18 08:23:06.246 1770-5101/? I/ActivityTaskManager: START u0 {act=android.provider.Telephony.ACTION_CHANGE_DEFAULT cmp=com.google.android.permissioncontroller/com.android.permissioncontroller.role.ui.RequestRoleActivity (has extras)} from uid 10043
2021-06-18 08:23:06.246 1770-5101/? W/PermissionPolicyService: Action Removed: starting Intent { act=android.provider.Telephony.ACTION_CHANGE_DEFAULT cmp=com.google.android.permissioncontroller/com.android.permissioncontroller.role.ui.RequestRoleActivity (has extras) } from ccc71.sb (uid=10043)

注意第二行中的“Action Removed”。
总之,只有请求自己的角色是可能的,但无法还原。这对备份应用程序来说真是个糟糕的消息,谷歌正在使它们看起来很糟糕,就像现在的许多其他应用程序一样。

我还没有使用过RoleManager,也不知道当前的默认内部程序是什么,但你可以尝试我的这个答案。不过你需要提供自己的对话框/提示,因为如果它起作用的话,否则对用户来说可能会是无声的。(我不能保证那里的评论;我从未有机会测试它,然后完全忘记了它。) - Mike M.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接