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

Android Studio开发通讯录APP时添加联系人功能失效如何解决

修复方案

你遇到的报错核心和代码写在独立Add_ContactActivity无关,不需要绑定MainActivity,按以下三个步骤修改即可解决:

1. 补全权限配置

  • 首先在AndroidManifest.xml中添加联系人读写权限声明:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
  • 安卓6.0(API 23)及以上版本需要动态申请权限,仅静态声明不生效,在Add_Contact的onCreate方法中添加权限判断逻辑:
// 顶部先导入相关类
import android.Manifest;
import android.content.pm.PackageManager;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

// 定义权限请求码
private static final int REQUEST_WRITE_CONTACTS = 101;

// onCreate中初始化控件之前加入以下代码
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_CONTACTS}, REQUEST_WRITE_CONTACTS);
}

2. 修正Intent参数

部分安卓系统对RawContacts类型的Intent匹配兼容性较差,替换为官方标准写法即可:

// 替换你原有跳转逻辑的Intent创建代码
Intent intent = new Intent(Intent.ACTION_INSERT);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
intent.putExtra(ContactsContract.Intents.Insert.NAME, name.getText().toString().trim());
intent.putExtra(ContactsContract.Intents.Insert.EMAIL, email.getText().toString().trim());
intent.putExtra(ContactsContract.Intents.Insert.PHONE, phone.getText().toString().trim());
// 新增参数,添加完成后直接返回你的应用
intent.putExtra("finishActivityOnSaveCompleted", true);

3. 适配安卓11及以上版本的包可见性规则

如果你的targetSdkVersion >= 30,系统默认限制应用获取其他应用的列表,会导致intent.resolveActivity返回null,需要在AndroidManifest.xml的<manifest>根节点下添加如下配置:

<queries>
    <intent>
        <action android:name="android.intent.action.INSERT" />
        <data android:mimeType="vnd.android.cursor.dir/contact" />
    </intent>
</queries>

内容的提问来源于stack exchange,提问作者André_Almeida

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:06:04