Xamarin开发获取联系人信息的方法
在输入法开发中,需要获取通讯录的联系人姓名,然后将其编码导入词库中,本文就简单介绍一下两个平台上获取联系人信息的方法;
Xamrin.Android平台
1.添加权限申明
在AndroidManifest.xml文件中间添加如下权限申明:
<!-- 读取联系人权限,上传联系人需要用到此权限 -->
<uses-permission
android:name="android.permission.READ_CONTACTS" />
2.读取联系人信息
/**
* 获取联系人
*/
public static List<String> getContacts(Context context) {
var result = new List<String>();
if (!PermissionAbout.isGrant(context, Manifest.Permission.ReadContacts)) return null;
Android.Net.Uri uri = Android.Net.Uri.Parse("content://com.android.contacts/contacts"); // 访问所有联系人
ContentResolver resolver = context.ContentResolver;
ICursor cursor = resolver.Query(uri, new String[] { ContactsColumns.DisplayName }, null, null, null);
if (cursor == null) return result;
while (cursor.MoveToNext()) {
String str = cursor.GetString(0);
if (str.Length < 2) continue;
result.Add(str);
}
cursor.Close();
return result;
}
其中PermissionAbout.isGrant是我自己写的一个辅助方法,实现如下:
public static bool isGrant(Context context, string permission) {
if (Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.M && (context.CheckSelfPermission(
permission) != Permission.Granted)) {
if (context is Activity) {
((Activity)context).RequestPermissions(new String[] { permission }, 1);
}
return false;
}
return true;
}
Xamarin.iOS平台
1.添加权限申明
在info.plist文件中添加Privacy - Contacts Usage Description
,描述字符串:描述一下你申请这个权限的理由,类似下面的效果:
2.读取联系人
public async Task<List<string>> getContacts() {
var status = CNContactStore.GetAuthorizationStatus(CNEntityType.Contacts);
var store = new CNContactStore();
if (status != CNAuthorizationStatus.Authorized) {
var result = await store.RequestAccessAsync(CNEntityType.Contacts);
if (result.Item1 == false) {
return null;
}
}
var d = CNContactFormatter.GetDescriptorForRequiredKeys(CNContactFormatterStyle.FullName);
var requst = new CNContactFetchRequest(d);
List<String> list = new List<string>();
CNContactStoreListContactsHandler handler = (CNContact contact, ref bool stop) => {
string name = contact.FamilyName + contact.MiddleName + contact.GivenName;
list.Add(name);
};
store.EnumerateContacts(requst, out var error, handler);
return list;
}
希望本文能对你有所帮助。
- 原文作者:岁寒
- 原文链接:http://www.suihanime.com/post/Xamarin/Xamarin%E5%BC%80%E5%8F%91%E8%8E%B7%E5%8F%96%E8%81%94%E7%B3%BB%E4%BA%BA%E4%BF%A1%E6%81%AF%E7%9A%84%E6%96%B9%E6%B3%95/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。