gpt4 book ai didi

android - 在 Android 中将城市和街道添加到个人详细信息

转载 作者:行者123 更新时间:2023-11-29 02:15:50 25 4
gpt4 key购买 nike

我想制作一个应用程序来将个人详细信息添加到 Android 中的联系人中。我可以使用以下代码添加姓名、电话号码等:

intent addContactIntent = new Intent(Contacts.Intents.Insert.ACTION, Contacts.People.CONTENT_URI);
addContactIntent.putExtra(Contacts.Intents.Insert.NAME, "myname");
addContactIntent.putExtra(Contacts.Intents.Insert.PHONE, "232323222");
addContactIntent.putExtra(Contacts.Intents.Insert.PHONE_TYPE, Contacts.Phones.TYPE_MOBILE);

但问题是地址字段中有城市、街道等,我无法在此处添加数据。

最佳答案

可能有点晚了,但希望对遇到同样问题的人仍然有帮助:

尽管Contacts.Intents.Inserts折旧后,ContactsContract.Intents.Insert API仍然不提供通过 Intent 添加城市、街道等。要解决此问题,您必须使用 ContactsContract API 以编程方式执行此操作.这是我的解决方案:

首先,我用 Toast 响应一些“addContactEvent”(在我的例子中是单击按钮)。我的 addContactToAddressBook 方法返回描述操作结果的字符串资源的 ID。

int resultId = addContactToAddressBook(myContactObject, this);
Toast.makeText(this, getString(resultId), Toast.LENGTH_SHORT).show();

接下来,我向联系人地址簿中添加了很多信息,例如街道、城市、姓名...这些信息存储在联系人对象中。

public int addContactToAddressBook(MyContactObject contact, Context context){

// is contact already in contacts??
if(contact != null && !numberAlreadyInContacts(contact.getPhoneNumber(), context)){

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
int rawContactInsertIndex = ops.size();

// prepare Contact
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, null)
.withValue(RawContacts.ACCOUNT_NAME, null)
.build());

// Insert First- and LastName
if(contact.getFirstName() != null && contact.getLastName() != null){
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.DISPLAY_NAME, "Lost Symbol Characters")
.withValue(StructuredName.GIVEN_NAME, contact.getFirstName())
.withValue(StructuredName.FAMILY_NAME, contact.getLastName())
.build());
}

// Insert Organistion and JobTitle
if(contact.getOrganisation() != null && contact.getJobTitle() != null){
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE)
.withValue(Organization.COMPANY, contact.getOrganisation())
.withValue(Organization.TYPE, Organization.TYPE_WORK)
.withValue(Organization.TITLE, contact.getJobTitle())
.withValue(Organization.TYPE, Organization.TYPE_WORK)
.build());
}

// Insert Email
if(contact.getEmailAddress() != null){
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
.withValue(Email.DATA, contact.getEmailAddress())
.withValue(Email.TYPE, Email.TYPE_WORK)
.build());
}

// Insert PhoneNumber
if(contact.getPhoneNumber() != null){
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
.withValue(Phone.NUMBER, contact.getPhoneNumber())
.withValue(Phone.TYPE, Phone.TYPE_WORK)
.build());
}

// Insert MobileNumber
if(contact.getMobileNumber() != null){
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
.withValue(Phone.NUMBER, contact.getMobileNumber())
.withValue(Phone.TYPE, Phone.TYPE_MOBILE)
.build());
}

// Insert Address
if(contact.getStreetAddress() != null && contact.getPostalCode() != null && contact.getLocation() != null && contact.getCountry() != null){
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE)
.withValue(StructuredPostal.COUNTRY, contact.getCountry())
.withValue(StructuredPostal.POSTCODE, contact.getPostalCode())
.withValue(StructuredPostal.CITY, contact.getLocation())
.withValue(StructuredPostal.STREET, contact.getStreetAddress())
.build());
}

// add to DB
try {
context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
return R.string.contact_added;

} catch (RemoteException e) {

return R.string.adding_contact_failed;

} catch (OperationApplicationException e) {

return R.string.adding_contact_failed;
}

} else if(contact != null && numberAlreadyInContacts(contact.getPhoneNumber(), context)){

return R.string.contact_exists;

} else {

return R.string.adding_contact_failed;
}
}

在这个方法中,我试图找出联系人是否已经在我的地址簿中。因此,我查找电话号码,因为它在所有联系人中应该是唯一的。

private boolean numberAlreadyInContacts(String number, Context context) {

if(number == null && number.length()<1){
return false;
}

Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));

ContentResolver contentResolver = context.getContentResolver();
Cursor contactLookup = contentResolver.query(uri, new String[] {BaseColumns._ID,
ContactsContract.PhoneLookup.DISPLAY_NAME }, null, null, null);

if (contactLookup != null && contactLookup.getCount() > 0) {
contactLookup.close();
return true;
}

contactLookup.close();
return false;
}

享受这段代码吧!

克里斯

关于android - 在 Android 中将城市和街道添加到个人详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4013113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com