我写了一个代码来保存与图像的联系.我用CNContact类来做.它成功保存了联系人.
该联系人在iOS的默认联系人应用程序中正确显示缩略图.但我的问题是,当我使用iOS的默认联系人应用程序通过短信或电子邮件分享该联系人时,该图像不会加到vCard中.
任何人都可以向我指导我做错了什么吗?
以下是我用来保存联系人的方法.它在Swift中.
func addContact(withData: ContactModel, andPicture picture: NSData?) -> Bool {
if(checkForPermission() != true) {
print("No permission")
return false
}
let contact = convertToCNMutableContact(withData)
contact.imageData = picture
let saveRequest = CNSaveRequest()
saveRequest.addContact(contact, toContainerWithIdentifier: nil)
do {
try contactStore.executeSaveRequest(saveRequest)
return true
} catch {
print("Couldn't save contact")
return false
}
}
Run Code Online (Sandbox Code Playgroud) 是否可以以名片格式从互联网发送消息.?我需要向手机发送联系人,以便收件人可以轻松保存联系人.
使用短信api s我们可以发送短信,但如何发送名片文件?
在我的项目场景中,我有10个人的电话号码,我需要将这些号码以名片格式发送到另一部手机.
有关如何实施的任何想法?
我正在尝试使用Android Api阅读VCard格式的Android设备联系人.我找到了一个相同的链接: Android contatcs vcard API
并尝试编写相同的代码,但它无法正常工作,因为我无法获取lookupkey:
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
int num = cur.getCount(); // I get 2 , as there are two contacts
String lookupKey = cur.getString(cur.getColumnIndex(Contacts.LOOKUP_KEY));
// The above line gives error : android.database.CursorIndexOutOfBoundsException:
// Index -1 requested, with a size of 2
Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey);
AssetFileDescriptor fd = resolver.openAssetFileDescriptor(uri, "r");
FileInputStream fis = fd.createInputStream();
byte[] b = new byte[(int)fd.getDeclaredLength()];
fis.read(b);
String vCard = new String(b);
sb.append(vCard); …Run Code Online (Sandbox Code Playgroud) 使用 I AddressBook.framework 我曾经从所有联系人创建 Contacts.vcf 并将其保存在文档目录中。这是我曾经使用的代码:
ABAddressBookRef addressBook1 = ABAddressBookCreate();
NSArray *arrayOfAllPeople = (__bridge_transfer NSArray *) ABAddressBookCopyArrayOfAllPeople(addressBook1);
long cnt = (unsigned long)[arrayOfAllPeople count];
if (cnt==0) {
ABAddressBookRequestAccessWithCompletion(addressBook1, nil);
}
if(ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized)
{
ABAddressBookRef addressBook2 = ABAddressBookCreate();
CFArrayRef contacts = ABAddressBookCopyArrayOfAllPeople(addressBook2);
CFDataRef vcards = (CFDataRef)ABPersonCreateVCardRepresentationWithPeople(contacts);
NSString *vcardString = [[NSString alloc] initWithData:(__bridge NSData *)vcards encoding:NSUTF8StringEncoding];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *folderPath = [paths objectAtIndex:0];
NSString *filePath = [folderPath stringByAppendingPathComponent:@"Contacts.vcf"];
[vcardString writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
CFRelease(addressBook2); }
Run Code Online (Sandbox Code Playgroud)
如何使用 Contacts.framework 创建包含所有设备联系人的 …
我想知道创建 vCard 的最佳方法是什么。我不需要将其存储在我的服务器上,只需在用户想要下载时生成它即可。下面的代码可以工作,但对我来说似乎很笨拙,有没有更好的方法?
<?php
function raf_create_vcard(){
$format_name = utf8_encode($name);
$format_email = utf8_encode($email);
$format_tel = utf8_encode($tel);
$format_fax = utf8_encode($fax);
$format_www = utf8_encode($www);
$format_address = utf8_encode($address);
return 'BEGIN%3AVCARD%0D%0AVERSION%3A4.0%0D%0AN%3A%3B'.$format_name.'%3B%3B%3B%0D%0AFN%3A'.$format_name.'%0D%0AEMAIL%3A'.$format_email.'%0D%0AORG%3A'.$format_name.'%0D%0ATEL%3A'.$format_tel.'%0D%0ATEL%3Btype%3DFAX%3A'.$format_fax.'%0D%0AURL%3Btype%3Dpref%3A'.$format_www.'%0D%0AADR%3A%3B'.$format_address.'%3B%3B%3B%3B%3BSpain%0D%0AEND%3AVCARD';
}
?>
Run Code Online (Sandbox Code Playgroud)
生成链接:
<a href="data:text/plain;charset=UTF-8,<?php echo raf_create_vcard(); ?>" download="contact.vcf">Download</a>
Run Code Online (Sandbox Code Playgroud) 我在这里遇到一些问题.
Error1'System.IO.MemoryStream'不包含'CopyTo'的定义
我的代码:
// Error occurs here (CopyTo) (For Framework 4.0)
ms.CopyTo(actualAttachment);
actualAttachment.Position = 0;
//Change CopyTo to WriteTo For Framework 2.0
ms.WriteTo(actualAttachment);
actualAttachment.Position = 0;
Run Code Online (Sandbox Code Playgroud)
我不得不重新输入我的整个代码以确保所有内容都进入流中,因为我在发送文件后删除文件时遇到了一些问题.但现在我收到了这个错误.
所以基本上它现在不应该保存任何东西.
我根本没注意到我使用的是什么框架.我每天使用4种类型的框架,有时候会让我感到困惑.
我正在尝试以编程方式启动联系人应用程序以导入包含大量联系人的大型.vcf文件.以下代码几乎完美无缺.
String vcfMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("vcf");
Intent openVcfIntent = new Intent(Intent.ACTION_VIEW);
openVcfIntent.setDataAndType(Uri.fromFile(savedVCardFile), vcfMimeType);
startActivity(openVcfIntent);
Run Code Online (Sandbox Code Playgroud)
唯一的问题是Android显示应用程序选择器对话框,不仅显示联系人应用程序,还显示Dropbox(或任何其他处理vCard文件的应用程序).我想阻止此行为并使用联系人应用程序直接打开文件,以便自动启动导入.
我在StackOverflow上尝试了几件没有运气的东西,比如设置:
openVcfIntent.setComponent(new ComponentName("com.android.contacts", "com.android.contacts.DialtactsContactsEntryActivity"));
openVcfIntent.setAction("android.intent.action.MAIN");
openVcfIntent.addCategory("android.intent.category.LAUNCHER");
openVcfIntent.addCategory("android.intent.category.DEFAULT");
Run Code Online (Sandbox Code Playgroud)
关于如何处理这个问题的任何想法?
android vcf-vcard import-contacts contactscontract android-contacts
作为初学者,我可能有一个愚蠢的问题,但我有几个不同个人的 VCF 文件,它们被压缩 (.vcf.gz)。我想使用 vcf-merge 将这些文件合并为一个包含所有个人的 VCF 文件。
但是,这需要使用 bgzip 实际压缩文件并使用 tabix 进行索引。有谁知道我是否可以从 .vcf.gz 文件转到 tabix 索引和 bgzip 文件而不先解压缩它(它需要大量存储空间,文件非常大)。
谢谢!
我是swift的新手.我在从iPhone导出联系人时遇到问题,并将其转换为.Vcf文件,用于将文件上传到Web服务器.此外,我想从Web服务器导入.Vcf文件并转换为iPhone联系人的模式.有谁能帮助我达到预期的效果?