如何在Flutter中导入VCF文件至手机通讯录?
如何在Flutter中唤起通讯录并导入VCF联系人数据
你当前通过vcard_maintained生成VCF文件后,直接调用saveToFile只会把文件存在应用沙盒内,系统通讯录无法直接读取。这里提供两种可行方案:
方案一:直接调用通讯录API添加联系人(推荐)
无需生成VCF文件,直接将数据传递给系统通讯录,步骤如下:
- 添加依赖到
pubspec.yaml:dependencies: contacts_service: ^0.6.3 permission_handler: ^10.2.0 - 配置权限:
- Android:在
android/app/src/main/AndroidManifest.xml中添加权限声明:<uses-permission android:name="android.permission.WRITE_CONTACTS"/> - iOS:在
ios/Runner/Info.plist中添加权限说明:<key>NSContactsUsageDescription</key> <string>需要访问通讯录以保存联系人</string>
- Android:在
- 替换原有的
save函数:save: () async { // 请求通讯录权限 PermissionStatus status = await Permission.contacts.request(); if (status.isGranted) { // 构建联系人对象 Contact contact = Contact(); contact.givenName = testingdatalist[index].displayname!; contact.jobTitle = testingdatalist[index].jobtitle!; contact.phones = [Item(label: '工作', value: testingdatalist[index].phonenumber1!)]; contact.emails = [Item(label: '工作', value: testingdatalist[index].email!)]; contact.notes = testingdatalist[index].about!; // 保存到系统通讯录 await ContactsService.addContact(contact); // 可选:添加成功提示,可使用fluttertoast等包实现 } else { // 权限被拒绝时提示用户 } }
方案二:生成VCF并唤起系统导入界面
如果必须使用VCF文件方式,需要将文件保存到系统可访问路径,再唤起导入界面:
- 添加依赖到
pubspec.yaml:dependencies: path_provider: ^2.0.15 open_file: ^3.3.2 - 修改
save函数:save: () async { var vCard = VCard(); vCard.firstName = testingdatalist[index].displayname!; vCard.jobTitle = testingdatalist[index].jobtitle!; vCard.workPhone = testingdatalist[index].phonenumber1!; vCard.note = testingdatalist[index].about!; vCard.email = testingdatalist[index].email!; // 获取系统可访问的存储路径 Directory? directory; if (Platform.isAndroid) { directory = await getExternalStorageDirectory(); } else if (Platform.isIOS) { directory = await getApplicationDocumentsDirectory(); } if (directory != null) { String filePath = '${directory.path}/contact.vcf'; // 将VCF内容写入文件 await File(filePath).writeAsString(vCard.getFormattedString()); // 唤起系统打开文件,用户可选择导入到通讯录 await OpenFile.open(filePath); } }
注:这种方式需要用户手动完成导入操作,体验不如方案一直接。
内容的提问来源于stack exchange,提问作者Mohammad Yazbeck
相关产品推荐
相关产品推荐

