如何使用意图和活动在 Xamarin Android 中插入城市、街道、邮政编码、国家/地区的联系人?
Posted
技术标签:
【中文标题】如何使用意图和活动在 Xamarin Android 中插入城市、街道、邮政编码、国家/地区的联系人?【英文标题】:How to insert contacts with city, street, postal code, country in Xamarin Android using intent and activity? 【发布时间】:2019-11-29 03:48:17 【问题描述】:我需要使用带有 Xamarin Forms/android 的意图以编程方式打开 android 联系人应用程序。当添加新联系人活动/屏幕出现时,我想使用以下字段预先填充它:
姓名(正在填充) 电话(正在填充) 街道(无人居住) 城市(无人居住) 状态(未填充) 国家(未看到此字段,未填充)如上所述,一些屏幕正在填充,但地址字段没有。这是用于触发打开 Android 的“添加联系人”屏幕的活动的 Xamarin C# Android 代码/服务:
public void AddContact(string name, string[] phoneNumbers, string streetAddress, string city, string state, string postalCode, CountryValues countrycode)
// get current activity
var activity = CrossCurrentActivity.Current.Activity;
// create add contact intent
var intent = new Intent(Intent.ActionInsert);
intent.SetType(ContactsContract.Contacts.ContentType);
// add field for contact name
intent.PutExtra(ContactsContract.Intents.Insert.Name, name);
// Adding more than on phone number if available
foreach (string numbers in phoneNumbers)
intent.PutExtra(ContactsContract.Intents.Insert.Phone, numbers);
// pre-populate address fields
intent.PutExtra(ContactsContract.CommonDataKinds.StructuredPostal.Street, streetAddress);
intent.PutExtra(ContactsContract.CommonDataKinds.StructuredPostal.City, city);
intent.PutExtra(ContactsContract.CommonDataKinds.StructuredPostal.Region, state);
intent.PutExtra(ContactsContract.CommonDataKinds.StructuredPostal.Postcode, postalCode);
intent.PutExtra(ContactsContract.CommonDataKinds.StructuredPostal.Country, countrycode.ToString());
//start activity
activity.StartActivity(intent);
该活动确实会在联系人应用程序中打开“添加新联系人”屏幕,但只会填充姓名和电话号码字段。请看下面的截图:
我找到了一个可以转换为 Xamarin.Android 的链接,但我一直在努力实现 Java Samples。
【问题讨论】:
***.com/questions/4459138/… @Jason 我看到了那个答案。但是,该示例直接插入到联系人中,而无需使用 Activity 打开 Android 的内置联系人应用程序。关键是我想从我的应用程序中打开联系人应用程序,并预先填充新的联系人详细信息。其中一些字段已填充,但有些未填充。 @Jason 任何其他建议都会有所帮助 仍然没有找到可靠的答案。我目前正在查看:javased.com/index.php?source_dir=MIT-Mobile-for-Android/src/edu/… 和 gist.github.com/nolanlawson/6220089。我已经尝试了这些相同的代码,但仍然没有修复。 你有设置适当的权限吗? docs.microsoft.com/en-us/xamarin/android/app-fundamentals/… 【参考方案1】:我担心您只能将ContactsContract.Intents.Insert
下可用的值作为参数传递。因此,对于地址,您只有 Postal code,如文档所述:
public static final String POSTAL:在 API 5 中添加
联系人的额外字段 邮寄地址。
类型:字符串
常量值:“邮政”
因此,您将按如下方式传递邮政编码:
intent.PutExtra(ContactsContract.Intents.Insert.Postal, postalCode);
您现在可能需要让您的用户在“添加联系人”页面中手动输入其他值。
另外,您是否以列表方式测试了同时添加多个手机的方式?从文档来看,您应该使用 SECONDARY_PHONE 和 TERTIARY_PHONE 常量。
【讨论】:
嘿@Mateus 感谢您的回复。我已更新代码以使用辅助电话和第三电话常量。在 Android 文档中,我没有看到它说你只能在 'ContactsContract.Intents.Insert' 下预填充值,你能指点我那个文档吗? @Hue 来自经验,但我很久以前就尝试过了,所以从那时起事情可能会发生变化,但唯一对你有用的常量是ContactsContract.Intents.Insert
中的常量我认为情况仍然如此。据我所知,ContactsContract.CommonDataKinds
用于检索数据而不是插入,如***.com/a/10756150/9629238 和***.com/a/29021101/9629238 所示。
我将继续与 Android 团队的一些代表确认。如果是这样,我会将其标记为答案然后
@Hue 当然,我也会这样做。在你得到信息后告诉我,这是很好的信息。
我确实与 Android 团队进行了验证,确实是这样以上是关于如何使用意图和活动在 Xamarin Android 中插入城市、街道、邮政编码、国家/地区的联系人?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用单击事件和意图将当前日期从一个活动传递到android中的下一个活动
如何在 Xamarin (Visual Studio) 中构建 XAP 文件