コメント
コメントの投稿
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。
namespace AppName.Services
{
//DependencyServiceから利用する
public interface IContactsService
{
List<UserInfo> GetAddressList();
}
}
<key>NSContactsUsageDescription</key>
<string>連絡帳を利用します。</string>
using System;
using System.Collections.Generic;
using Foundation;
using UIKit;
using Contacts;
using Xamarin.Forms;
[assembly: Dependency(typeof(ContactsService))]
namespace AppName.iOS.Services
{
public class ContactsService : IContactsService
{
public List<UserInfo> GetAddressList()
{
List<UserInfo> userList = new List<UserInfo>();
try
{
//iOSバージョン9以降からのみ
if (UIDevice.CurrentDevice.CheckSystemVersion(9, 0))
{
NSError error;
var ContainerId = new CNContactStore().DefaultContainerIdentifier;
var predicate = CNContact.GetPredicateForContactsInContainer(ContainerId);
// 取得したいフィールドを設定
var fetchKeys = new NSString[] { CNContactKey.GivenName, //FirstName
CNContactKey.FamilyName, //LastName
CNContactKey.PhoneticGivenName, //FirstNameKana
CNContactKey.PhoneticFamilyName, //LastNameKana
CNContactKey.EmailAddresses,
CNContactKey.PhoneNumbers,
CNContactKey.PostalAddresses,
CNContactKey.Birthday,
CNContactKey.Dates,
CNContactKey.DepartmentName,
CNContactKey.JobTitle,
CNContactKey.MiddleName,
CNContactKey.Note,
CNContactKey.OrganizationName
};
//全ての連絡先を取得する
var store = new CNContactStore();
var contacts = store.GetUnifiedContacts(predicate, fetchKeys, out error);
if (contacts != null && contacts.Length > 0)
{
//登録されている連絡先の数だけループする
foreach (var contact in contacts)
{
UserInfo uInfo = new UserInfo();
// データ取得
uInfo.FirstName = contact.GivenName;
uInfo.LastName = contact.FamilyName;
uInfo.FirstNameKana = contact.PhoneticGivenName;
uInfo.LastNameKana = contact.PhoneticFamilyName;
if (contact.EmailAddresses != null && contact.EmailAddresses.Length > 0)
{
//メールアドレスの取得
uInfo.Email = contact.EmailAddresses.FirstOrDefault().Value;
}
uInfo.BirthDay = new DateTimeOffset(new DateTime((int)contact.Birthday.Year,
(int)contact.Birthday.Month,
(int)contact.Birthday.Day));
userList.Add(uInfo);
}
}
}
else
{
//iOSバージョン8以下はAddressBookを使用してください
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message + System.Environment.NewLine + ex.StackTrace);
}
return userList;
}
}
}
<uses-permission android:name="android.permission.READ_CONTACTS" />
using System;
using System.Collections.Generic;
using Android.Database;
using Android.Provider;
using Xamarin.Forms;
[assembly Dependency(typeof(ContactsService))]
Namespace AppName.Droid.Services
{
Public Class ContactsService : IContactsService
{
Public List<UserInfo> GetAddressList()
{
List<UserInfo> userList = New List<UserInfo>();
//カーソル取得列
String[] columns = {
ContactsContract.Contacts.InterfaceConsts.Id,
ContactsContract.Contacts.InterfaceConsts.DisplayName,
ContactsContract.Contacts.InterfaceConsts.PhoneticName,
ContactsContract.CommonDataKinds.Event.StartDate,
ContactsContract.CommonDataKinds.Email.InterfaceConsts.ContactId,
};
String where = String.Empty;
//カーソル条件 (誕生日のデータがある連絡先のみに指定しています。)
where = ContactsContract.Data.InterfaceConsts.Mimetype + " = '" + ContactsContract.CommonDataKinds.Event.ContentItemType + "' AND " +
ContactsContract.CommonDataKinds.Event.InterfaceConsts.Type + "=" + (int)EventDataKind.Birthday;
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.InterfaceConsts.DisplayName;
//生年月日のデータを取得するカーソル
var cursor = Forms.Context.ContentResolver.Query(ContactsContract.Data.ContentUri, columns, where, selectionArgs, sortOrder);
If (cursor.Count > 0)
{
While (cursor.MoveToNext())
{
UserInfo uInfo = New UserInfo();
//IDの取得(取得のみ/使用しない)
String id = cursor.GetString(cursor.GetColumnIndex(columns[0]));
//名前の取得
uInfo.Name = cursor.GetString(cursor.GetColumnIndex(columns[1]));
uInfo.Kana = cursor.GetString(cursor.GetColumnIndex(columns[2]));
//メールアドレスの取得
String emailId = cursor.GetString(cursor.GetColumnIndex(ContactsContract.CommonDataKinds.Email.InterfaceConsts.ContactId)); //(メールアドレス検索用)
String email = String.Empty;
ICursor eCursor = Forms.Context.ContentResolver.Query(
ContactsContract.CommonDataKinds.Email.ContentUri,
null,
ContactsContract.CommonDataKinds.Email.InterfaceConsts.ContactId + " = ? ",
New String[] { emailId },
null);
While (eCursor.MoveToNext())
{
email = eCursor.GetString(eCursor.GetColumnIndex(ContactsContract.CommonDataKinds.Email.Address));
break;
}
eCursor.Close();
uInfo.Email = email;
//誕生日の取得
String birthday = cursor.GetString(cursor.GetColumnIndex(ContactsContract.CommonDataKinds.Event.StartDate));
DateTime dt;
If (!String.IsNullOrEmpty(birthday) &&
DateTime.TryParse(birthday, out dt)) //yyyy-MM-dd形式で取得できます。
{
uInfo.BirthDay = New DateTimeOffset(dt);
}
//戻り値のListに追加する
friendList.Add(fInfo);
}
}
cursor.Close();
cursor = null;
Return userList;
}
}
}
using AppName.Services;
using Xamarin.Forms;
public partial class TestPage : ContentPage
{
void OnButtomClick(object sender, EventArgs e)
{
List<UserInfo> userList = DependencyService.Get<IContactsService>().GetAddressList();
}
}
※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。
入力されていないコメントには返信しませんのであらかじめご了承くださいませ。