You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android API 30 如何检测设备是否已安装电子邮件应用

Android API 30+ 检测已安装邮件应用失败解决方案

问题根因

你当前用的Intent.CATEGORY_APP_EMAIL匹配规则本身适配性很差:只有极少数系统自带邮件应用会在主Activity中声明该 category,绝大多数第三方邮件应用(QQ邮箱、网易邮箱、Outlook等)都不会主动声明,所以天然就有概率查不到已安装的邮件应用,叠加API30+的包可见性限制,就会出现返回列表为空的问题。

修复步骤

1. 修改AndroidManifest中的queries配置

替换你原来的queries节点,匹配所有处理发邮件请求的应用过滤器:

<queries>
    <intent>
        <action android:name="android.intent.action.SENDTO" />
        <data android:scheme="mailto" />
    </intent>
</queries>

2. 修改检测逻辑代码

改用mailto协议匹配规则查询,同时使用正确的查询标记:

import android.net.Uri
import android.content.pm.PackageManager

fun isEmailAppInstalled(context: Context): Boolean {
    val sendEmailIntent = Intent(Intent.ACTION_SENDTO).apply {
        data = Uri.parse("mailto:")
    }
    return context.packageManager.queryIntentActivities(
        sendEmailIntent,
        PackageManager.MATCH_DEFAULT_ONLY
    ).isNotEmpty()
}

注意事项

  • 不需要申请QUERY_ALL_PACKAGES权限,仅靠上面的queries配置即可满足包可见性要求,申请多余的全量查询权限反而可能导致Google Play上架被拒
  • 该方案匹配所有可以处理发送邮件请求的应用,和你控制发送邮件按钮显示的业务场景完全匹配,适配市面上绝大多数主流邮件应用
  • 不要添加PackageManager.GET_RESOLVED_FILTER等多余的查询标记,Android11+的包可见性规则下多余标记可能导致查询结果为空

内容的提问来源于stack exchange,提问作者DMO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 04:39:03