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

如何让Android通话短信应用显示在默认联系人的「关联应用」列表中

让Android通话/短信应用出现在系统联系人「关联应用」列表的解决方案

要让你的应用出现在系统联系人的「关联应用」列表中,核心是正确注册联系人相关的Intent Filter、声明必要权限,并适配不同Android版本的系统限制,仅靠ContentProvider或SyncAdapter是不够的,具体步骤如下:

1. 声明必要权限

在AndroidManifest.xml中添加应用所需的基础权限,同时适配高版本Android的权限要求:

<!-- 联系人读写权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />

<!-- 通话与短信权限 -->
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.SEND_SMS" />

<!-- Android 10+ 适配:读取电话状态(按需添加) -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="30" />

<!-- Android 11-13 适配:允许系统发现应用 -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" android:maxSdkVersion="33" />

2. 注册关键Intent Filter

系统联系人应用会根据应用注册的Intent Filter识别关联能力,为对应Activity添加以下过滤规则:

<!-- 处理联系人详情查看/编辑的Activity -->
<activity android:name=".ui.ContactHandlerActivity">
    <!-- 匹配联系人详情页的查看请求 -->
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="vnd.android.cursor.item/phone_v2" />
        <data android:mimeType="vnd.android.cursor.item/person" />
    </intent-filter>

    <!-- 匹配联系人编辑请求(按需添加) -->
    <intent-filter>
        <action android:name="android.intent.action.EDIT" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="vnd.android.cursor.item/phone_v2" />
        <data android:mimeType="vnd.android.cursor.item/person" />
    </intent-filter>
</activity>

<!-- 拨号Activity -->
<activity android:name=".ui.DialerActivity">
    <intent-filter>
        <action android:name="android.intent.action.DIAL" />
        <action android:name="android.intent.action.CALL" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="tel" />
    </intent-filter>
</activity>

<!-- 短信发送Activity -->
<activity android:name=".ui.SmsSenderActivity">
    <intent-filter>
        <action android:name="android.intent.action.SENDTO" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="smsto" />
    </intent-filter>
</activity>

3. 适配Android 11+包可见性

Android 11及以上版本限制了应用间可见性,在AndroidManifest.xml中添加queries标签确保系统联系人能发现你的应用:

<queries>
    <!-- 允许访问系统联系人应用 -->
    <package android:name="com.android.contacts" />
    <!-- 匹配联系人相关的Intent -->
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:mimeType="vnd.android.cursor.item/phone_v2" />
    </intent>
</queries>

4. 可选:添加联系人关联元数据(优化识别)

通过元数据明确告知系统应用的联系人处理能力,在application标签下添加:

<meta-data
    android:name="android.provider.CONTACTS_STRUCTURE"
    android:resource="@xml/contacts_structure" />

然后在res/xml目录下创建contacts_structure.xml文件:

<contacts-structure xmlns:android="http://schemas.android.com/apk/res/android">
    <contact-set>
        <contact
            android:icon="@drawable/ic_app_logo"
            android:label="@string/app_name"
            android:summary="@string/app_contact_desc" />
    </contact-set>
</contacts-structure>

验证方法

安装应用后,申请并授予所有必要权限,打开系统联系人应用进入任意联系人详情页,下滑即可看到「关联应用」列表。如果未显示,可尝试重启系统联系人应用或设备。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:00:19