示例#1
0
        static void GetPhoto(Context ctx, ref AndroidContact destination, Android.Net.Uri photoUri)
        {
            ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
            const int bufSize = 0x100;
            byte[] buf = new byte[bufSize];
            int n;
            using (Stream fileStream = ctx.ContentResolver.OpenInputStream(photoUri))
            {
                while ((n = fileStream.Read(buf, 0, bufSize)) > 0)
                    byteBuffer.Write(buf, 0, n);
            }

            destination.Photo = byteBuffer.ToByteArray();
        }
示例#2
0
        public static IEnumerable<AndroidContact> GetContactList(Activity context)
        {
            string[] projection = { ContactsContract.Contacts.InterfaceConsts.Id,
                                      ContactsContract.Contacts.InterfaceConsts.DisplayName,
                                      ContactsContract.Contacts.InterfaceConsts.PhotoThumbnailUri };

            var loader = new CursorLoader(context, ContactsContract.Contacts.ContentUri, projection, null, null, null);
            var cursor = (ICursor)loader.LoadInBackground();

            if (cursor.MoveToFirst())
            {
                do
                {
                    var c = new AndroidContact();
                    c.Id = cursor.GetString(0);
                    c.DisplayName = cursor.GetString(1);

                    var uri = cursor.GetString(2);
                    if (uri != null)
                        c.PhotoThumbnailUri = Android.Net.Uri.Parse(uri);

                    yield return c;
                } while (cursor.MoveToNext());
            }

            cursor.Close();
        }
示例#3
0
        public static string ImportContact(Context ctx, AndroidContact contact)
        {
            List<ContentProviderOperation> ops = new List<ContentProviderOperation>();

            ops.Add(ContentProviderOperation.NewInsert(ContactsContract.RawContacts.ContentUri)
                .WithValue(ContactsContract.RawContacts.InterfaceConsts.AccountType, null)
                .WithValue(ContactsContract.RawContacts.InterfaceConsts.AccountName, null)
                .Build());

            if (contact.DisplayName != null)
            {
                ops.Add(ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri)
                    .WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0)
                    .WithValue(ContactsContract.Data.InterfaceConsts.Mimetype, ContactsContract.CommonDataKinds.StructuredName.ContentItemType)
                    .WithValue(ContactsContract.CommonDataKinds.StructuredName.DisplayName, contact.DisplayName)
                    .Build());
            }
            if (contact.Photo != null)
            {
                ops.Add(ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri)
                    .WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0)
                    .WithValue(ContactsContract.Data.InterfaceConsts.Mimetype, ContactsContract.CommonDataKinds.Photo.ContentItemType)
                    .WithValue(ContactsContract.CommonDataKinds.Photo.PhotoColumnId, contact.Photo)
                    .Build());
            }
            if (contact.PhoneNumbers != null)
            {
                foreach (var phone in contact.PhoneNumbers)
                {
                    ops.Add(ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri)
                        .WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0)
                        .WithValue(ContactsContract.Data.InterfaceConsts.Mimetype, ContactsContract.CommonDataKinds.Phone.ContentItemType)
                        .WithValue(ContactsContract.CommonDataKinds.Phone.Number, phone.Data)
                        .WithValue(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Type, phone.Type)
                        .Build());
                }
            }
            if (contact.EmailAddresses != null)
            {
                foreach (var email in contact.EmailAddresses)
                {
                    ops.Add(ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri)
                        .WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0)
                        .WithValue(ContactsContract.Data.InterfaceConsts.Mimetype, ContactsContract.CommonDataKinds.Email.ContentItemType)
                        .WithValue(ContactsContract.CommonDataKinds.Email.Address, email.Data)
                        .WithValue(ContactsContract.CommonDataKinds.Email.InterfaceConsts.Type, email.Type)
                        .Build());
                }
            }
            if (contact.PostalAddresses != null)
            {
                foreach (var postal in contact.PostalAddresses)
                {
                    ops.Add(ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri)
                        .WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0)
                        .WithValue(ContactsContract.Data.InterfaceConsts.Mimetype, ContactsContract.CommonDataKinds.StructuredPostal.ContentItemType)
                        .WithValue(ContactsContract.CommonDataKinds.StructuredPostal.FormattedAddress, postal.Data)
                        .WithValue(ContactsContract.CommonDataKinds.StructuredPostal.InterfaceConsts.Type, postal.Type)
                        .Build());
                }
            }
            if (contact.Nickname != null)
            {
                ops.Add(ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri)
                    .WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0)
                    .WithValue(ContactsContract.Data.InterfaceConsts.Mimetype, ContactsContract.CommonDataKinds.Nickname.ContentItemType)
                    .WithValue(ContactsContract.CommonDataKinds.Nickname.Name, contact.Nickname)
                    .Build());
            }
            if (contact.Ims != null)
            {
                foreach (var im in contact.Ims)
                {
                    ops.Add(ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri)
                        .WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0)
                        .WithValue(ContactsContract.Data.InterfaceConsts.Mimetype, ContactsContract.CommonDataKinds.Im.ContentItemType)
                        .WithValue(ContactsContract.CommonDataKinds.Im.InterfaceConsts.Data, im.Data)
                        .WithValue(ContactsContract.CommonDataKinds.Im.InterfaceConsts.Type, im.Type)
                        .WithValue(ContactsContract.CommonDataKinds.Im.Protocol, im.Protocol)
                        .WithValue(ContactsContract.CommonDataKinds.Im.CustomProtocol, im.CustomProtocol)
                        .Build());
                }
            }
            if (contact.Websites != null)
            {
                foreach (var website in contact.Websites)
                {
                    ops.Add(ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri)
                        .WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0)
                        .WithValue(ContactsContract.Data.InterfaceConsts.Mimetype, ContactsContract.CommonDataKinds.Website.ContentItemType)
                        .WithValue(ContactsContract.CommonDataKinds.Website.Url, website.Data)
                        .WithValue(ContactsContract.CommonDataKinds.Website.InterfaceConsts.Type, website.Type)
                        .Build());
                }
            }
            if (contact.Note != null)
            {
                ops.Add(ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri)
                    .WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0)
                    .WithValue(ContactsContract.Data.InterfaceConsts.Mimetype, ContactsContract.CommonDataKinds.Note.ContentItemType)
                    .WithValue(ContactsContract.CommonDataKinds.Note.NoteColumnId, contact.Note)
                    .Build());
            }

            var res = ctx.ContentResolver.ApplyBatch(ContactsContract.Authority, ops);
            return res[0].Uri.LastPathSegment;
        }
示例#4
0
        public static AndroidContact GetContactInformation(Context ctx, string contactId)
        {
            var contact = new AndroidContact();

            var generalProjection = new string[] { ContactsContract.Contacts.InterfaceConsts.Id,
                                                    ContactsContract.Contacts.InterfaceConsts.DisplayName,
                                                    ContactsContract.Contacts.InterfaceConsts.PhotoUri };
            var phoneProjection = new string[] { ContactsContract.CommonDataKinds.Phone.InterfaceConsts.ContactId,
                                                    ContactsContract.CommonDataKinds.Phone.Number,
                                                    ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Type };
            var emailProjection = new string[] { ContactsContract.CommonDataKinds.Email.InterfaceConsts.ContactId,
                                                    ContactsContract.CommonDataKinds.Email.Address,
                                                    ContactsContract.CommonDataKinds.Email.InterfaceConsts.Type };
            var addressProjection = new string[] { ContactsContract.CommonDataKinds.StructuredPostal.InterfaceConsts.Id,
                                                    ContactsContract.CommonDataKinds.StructuredPostal.FormattedAddress,
                                                    ContactsContract.CommonDataKinds.StructuredPostal.InterfaceConsts.Type };
            var nicknameProjection = new string[] { ContactsContract.Data.InterfaceConsts.ContactId,
                                                    ContactsContract.Data.InterfaceConsts.Mimetype,
                                                    ContactsContract.CommonDataKinds.Nickname.Name };
            var imProjection = new string[] { ContactsContract.Data.InterfaceConsts.ContactId,
                                                    ContactsContract.Data.InterfaceConsts.Mimetype,
                                                    ContactsContract.CommonDataKinds.Im.InterfaceConsts.Data,
                                                    ContactsContract.CommonDataKinds.Im.InterfaceConsts.Type,
                                                    ContactsContract.CommonDataKinds.Im.Protocol,
                                                    ContactsContract.CommonDataKinds.Im.CustomProtocol };
            var websiteProjection = new string[] { ContactsContract.Data.InterfaceConsts.ContactId,
                                                    ContactsContract.Data.InterfaceConsts.Mimetype,
                                                    ContactsContract.CommonDataKinds.Website.Url,
                                                    ContactsContract.CommonDataKinds.Website.InterfaceConsts.Type };
            var noteProjection = new string[] { ContactsContract.Data.InterfaceConsts.ContactId,
                                                    ContactsContract.Data.InterfaceConsts.Mimetype,
                                                    ContactsContract.CommonDataKinds.Note.NoteColumnId };

            var generalCursor =
                (ICursor)new CursorLoader(ctx, ContactsContract.Contacts.ContentUri,
                    generalProjection,
                    ContactsContract.Contacts.InterfaceConsts.Id + " = ?",
                    new string[] { contactId },
                    null).LoadInBackground();
            var phoneCursor =
                (ICursor)new CursorLoader(ctx, ContactsContract.CommonDataKinds.Phone.ContentUri,
                    phoneProjection,
                    ContactsContract.CommonDataKinds.Phone.InterfaceConsts.ContactId + " = ?",
                    new string[] { contactId },
                    null).LoadInBackground();
            var emailCursor =
                (ICursor)new CursorLoader(ctx, ContactsContract.CommonDataKinds.Email.ContentUri,
                    emailProjection,
                    ContactsContract.CommonDataKinds.Email.InterfaceConsts.ContactId + " = ?",
                    new string[] { contactId },
                    null).LoadInBackground();
            var addressCursor =
                (ICursor)new CursorLoader(ctx, ContactsContract.CommonDataKinds.StructuredPostal.ContentUri,
                    addressProjection,
                    ContactsContract.CommonDataKinds.StructuredPostal.InterfaceConsts.ContactId + " = ?",
                    new string[] { contactId },
                    null).LoadInBackground();
            var nicknameCursor =
                (ICursor)new CursorLoader(ctx, ContactsContract.Data.ContentUri,
                    nicknameProjection,
                    ContactsContract.Data.InterfaceConsts.ContactId + " = ? AND " +
                        ContactsContract.Data.InterfaceConsts.Mimetype + " = ?",
                    new string[] { contactId, ContactsContract.CommonDataKinds.Nickname.ContentItemType },
                    null).LoadInBackground();
            var imCursor =
                (ICursor)new CursorLoader(ctx, ContactsContract.Data.ContentUri,
                    imProjection,
                    ContactsContract.Data.InterfaceConsts.ContactId + " = ? AND " +
                        ContactsContract.Data.InterfaceConsts.Mimetype + " = ?",
                    new string[] { contactId, ContactsContract.CommonDataKinds.Im.ContentItemType },
                    null).LoadInBackground();
            var websiteCursor =
                (ICursor)new CursorLoader(ctx, ContactsContract.Data.ContentUri,
                    websiteProjection,
                    ContactsContract.Data.InterfaceConsts.ContactId + " = ? AND " +
                        ContactsContract.Data.InterfaceConsts.Mimetype + " = ?",
                    new string[] { contactId, ContactsContract.CommonDataKinds.Website.ContentItemType },
                    null).LoadInBackground();
            var noteCursor =
                (ICursor)new CursorLoader(ctx, ContactsContract.Data.ContentUri,
                    noteProjection,
                    ContactsContract.Data.InterfaceConsts.ContactId + " = ? AND " +
                        ContactsContract.Data.InterfaceConsts.Mimetype + " = ?",
                    new string[] { contactId, ContactsContract.CommonDataKinds.Note.ContentItemType },
                    null).LoadInBackground();

            if (!generalCursor.MoveToFirst() || !generalCursor.IsLast)
                throw new NotSupportedException("Could not find contact or found multiple instances.");

            contact.DisplayName = generalCursor.GetString(1);

            var photoUri = generalCursor.GetString(2);
            if (photoUri != null)
                GetPhoto(ctx, ref contact, Android.Net.Uri.Parse(photoUri));

            List<AndroidContactDataEntry> phoneNumbers = new List<AndroidContactDataEntry>();
            List<AndroidContactDataEntry> emailAddresses = new List<AndroidContactDataEntry>();
            List<AndroidContactDataEntry> postalAddresses = new List<AndroidContactDataEntry>();
            List<AndroidContactImEntry> ims = new List<AndroidContactImEntry>();
            List<AndroidContactDataEntry> websites = new List<AndroidContactDataEntry>();

            if (phoneCursor.MoveToFirst())
            {
                do
                {
                    phoneNumbers.Add(new AndroidContactDataEntry(phoneCursor.GetString(1), phoneCursor.GetString(2)));
                } while (phoneCursor.MoveToNext());
            }
            if (emailCursor.MoveToFirst())
            {
                do
                {
                    emailAddresses.Add(new AndroidContactDataEntry(emailCursor.GetString(1), emailCursor.GetString(2)));
                } while (emailCursor.MoveToNext());
            }
            if (addressCursor.MoveToFirst())
            {
                do
                {
                    postalAddresses.Add(new AndroidContactDataEntry(addressCursor.GetString(1), addressCursor.GetString(2)));
                } while (addressCursor.MoveToNext());
            }
            if (nicknameCursor.MoveToFirst())
                contact.Nickname = nicknameCursor.GetString(2);
            if (imCursor.MoveToFirst())
            {
                do
                {
                    ims.Add(new AndroidContactImEntry(imCursor.GetString(2), imCursor.GetString(3), imCursor.GetString(4), imCursor.GetString(5)));
                } while (imCursor.MoveToNext());
            }
            if (websiteCursor.MoveToFirst())
            {
                do
                {
                    websites.Add(new AndroidContactDataEntry(websiteCursor.GetString(2), websiteCursor.GetString(3)));
                } while (websiteCursor.MoveToNext());
            }
            if (noteCursor.MoveToFirst())
                contact.Note = noteCursor.GetString(2);

            if (phoneNumbers.Count > 0)
                contact.PhoneNumbers = phoneNumbers.ToArray();
            if (emailAddresses.Count > 0)
                contact.EmailAddresses = emailAddresses.ToArray();
            if (postalAddresses.Count > 0)
                contact.PostalAddresses = postalAddresses.ToArray();
            if (ims.Count > 0)
                contact.Ims = ims.ToArray();
            if (websites.Count > 0)
                contact.Websites = websites.ToArray();

            generalCursor.Close();
            phoneCursor.Close();
            emailCursor.Close();
            addressCursor.Close();
            nicknameCursor.Close();
            imCursor.Close();
            websiteCursor.Close();
            noteCursor.Close();

            return contact;
        }