如何使用意图和活动在 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 文件

如何从我的活动中意图在我的标签栏中分段?

如何在 Xamarin.Forms 中为轮播实现活动指示器?

从意图活动访问片段方法