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
相关产品推荐
相关产品推荐

