其他分享
首页 > 其他分享> > 在Android上,打开带有预填联系表的添加新联系人的正确方法是什么?

在Android上,打开带有预填联系表的添加新联系人的正确方法是什么?

作者:互联网

我想打开“保存新联系人”对话框,并在该对话框中预先填写街道地址,电话号码,电子邮件等.然后用户可以进行修改,添加或保存.

我看过几种方法.

1)不建议使用此方法,但大多数情况下都可以使用(无法使用地址等复合类型).

Intent i = new Intent(Intent.ACTION_INSERT_OR_EDIT);
                        i.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
                        i.putExtra(Insert.NAME,"Name");
                        i.putExtra(Insert.PHONE,"Number");
                        startActivity(i);

2)此方法似乎是一个不错的解决方案,但是我无法将此数据附加到打开联系人应用程序的意图中.它仅用于以编程方式自动插入新联系人.

ArrayList<ContentProviderOperation> op=new ArrayList<ContentProviderOperation>();
                    /*  ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
                    .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, mSelectedAccount.getType()) 
                    .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, mSelectedAccount.getName()) 
            .build()); */
     op.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
             .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
             .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
             .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name)
             .build());
     op.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
             .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
             .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
             .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,phone).build());

            getContentResolver().applyBatch(ContactsContract.AUTHORITY, op);

解决此问题的最佳实践是什么?

谢谢.

解决方法:

问题是您使用了错误的常量.您正在使用的Insert.NAME来自该类

Contacts.Intents.Insert

在API级别5中已弃用.已由类替换

ContactsContract.Intents.Insert

如果您使用此类中的常量,那应该没问题!我已经相应地更新了您的代码:

Intent i = new Intent(Intent.ACTION_INSERT_OR_EDIT);
                        i.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
                        i.putExtra(ContactsContract.Intents.Insert.NAME,"Name");
                        i.putExtra(ContactsContract.Intents.Insert.PHONE,"Number");
                        startActivity(i);

您可以找到ContactsContract.Intents.Insert类here的文档,以及有关使用Intents here修改联系人的一些常规信息.

标签:android-intent,android-contacts,android
来源: https://codeday.me/bug/20191122/2059724.html