代码之家  ›  专栏  ›  技术社区  ›  SMGhost

Android 10默认短信应用程序对话框未显示

  •  0
  • SMGhost  · 技术社区  · 5 年前

    我已成功修改我的应用程序以用作默认短信应用程序。 它似乎适用于旧版本,但不适用于android10仿真器。

    我的代码:

    fun Activity.askToBeDefaultSMSApp() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT)
            intent.putExtra(
                Telephony.Sms.Intents.EXTRA_PACKAGE_NAME,
                packageName
            )
            startActivityForResult(intent, DEFAULT_SMS_APP_PERMISSION_REQUEST)
        }
    }
    

    我确实收到一个activityresult响应,它说权限已被授予,但是如果我调用:

    Telephony.Sms.getDefaultSmsPackage(this)
    

    我仍然认为谷歌短信应用程序是默认的。

    有什么问题吗?

    0 回复  |  直到 5 年前
        1
  •  6
  •   nitinkumarveridic    4 年前

    对于android10,我们使用RollManger

    if (getDefaultSmsPackage(mContext) != null && !getDefaultSmsPackage(mContext).equals(mContext.getPackageName())) {
    RoleManager roleManager = null;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    roleManager = mContext.getSystemService(RoleManager.class);
    
    if (roleManager.isRoleAvailable(RoleManager.ROLE_SMS)) {
    if (roleManager.isRoleHeld(RoleManager.ROLE_SMS)) {
    Log.d("role", "role");
    } else {
    Intent roleRequestIntent = roleManager.createRequestRoleIntent(
    RoleManager.ROLE_SMS);
    ((Activity) mContext).startActivityForResult(roleRequestIntent, MESSAGE_CODE);
    }
    }
    }
    else {
    Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
    intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME,
    mContext.getPackageName());
    ((Activity) mContext).startActivityForResult(intent, MESSAGE_CODE);
    }
    
    
    
    }