如何在另一个应用程序中找到字段的意图键(尝试添加额外的联系信息但找不到键)

Posted

技术标签:

【中文标题】如何在另一个应用程序中找到字段的意图键(尝试添加额外的联系信息但找不到键)【英文标题】:How to find the intent key for fields in another app (Attempting to add extra contact information and cannot find the key) 【发布时间】:2018-10-27 06:51:33 【问题描述】:

我是新手,所以请原谅我的代码(请提出建议)

我正在尝试创建一个应用程序,在给定一组数据的情况下添加一个新联系人,并完全更新联系人中与雇主或雇员相关的每个字段。

我了解可以从意图中获取信息,并且需要特定的密钥来获取该信息。

我知道我可以使用Intents.Intent.NAME 和其他类似常量作为更通用字段的键。我注意到这些常量都是小写的,正是你所期望的。 Intents.Intent.NAME 返回“名称”。我已经读到这是 android 编程遵循的约定。

例如,当尝试更新地址时,我使用Intents.Intent.POSTAL 作为键,并使用字符串来表示按顺序包含街道、城市、州、邮编和国家/地区的地址。这会将所有这些信息更新到“街道”字段中。

我尝试了许多字符串,这些字符串对于城市、州等来说都是合理的键,但它们似乎都不起作用。我还尝试在街道、城市、州、邮政编码和国家/地区字符串之间输入“\n”,以查看它们是否会自动跳转到下一个文本字段(作为一种解决方法)。不幸的是,“Street”字段是一个多行字段,这也不起作用。

即使尝试更新人名的前缀和后缀,用作键的合理字符串似乎也不起作用。

总的来说,我无法更新以下字段,因为我不知道它们各自的键:

前缀(“名称”类别的一部分) 后缀(“名称”类别的一部分) 网址(“更多项目”) 日期/事件(“更多项目”) 城市/州/邮编/国家(“地址”类别)

这是我目前的代码,我已将其设置为将此方法应用于单击按钮。我提供了许多测试用例来说明我的观点。 我找不到更新这些字段所需的密钥。如果有任何方法可以收集有关从意图更新时字段检查数据的位置的信息,请告诉我。如果有其他方法可以更完美地更新联系信息,请告诉我。感谢您的帮助!

Intent insertIntent = new Intent(Intents.Insert.ACTION);
            insertIntent.setType(ContactsContract.RawContacts.CONTENT_TYPE);
            insertIntent.putExtra("name", "This T. Works");
            insertIntent.putExtra("name_given", "Thiss");
            insertIntent.putExtra("name_middle", "Doess");
            insertIntent.putExtra("name_family", "Nott");

            // All working properly
            insertIntent.putExtra(ContactsContract.Intents.Insert.EMAIL, "testing@testrun.com");
            insertIntent.putExtra(ContactsContract.Intents.Insert.PHONE, "(098) 765-4321");
            insertIntent.putExtra(ContactsContract.Intents.Insert.COMPANY, "TEST INC.");
            insertIntent.putExtra(Intents.Insert.SECONDARY_PHONE, "(123) 456-7890");
            insertIntent.putExtra(Intents.Insert.JOB_TITLE, "Tester");
            insertIntent.putExtra(Intents.Insert.IM_HANDLE, "@tester");

            // Not working at all... No "City" constant
            insertIntent.putExtra("postal_city", "Testopolis1");
            insertIntent.putExtra("city", "Testopolis2");
            insertIntent.putExtra("City", "Testopolis3");

            // Not working at all... No "State" constant
            insertIntent.putExtra("postal_state", "Testopolis1");
            insertIntent.putExtra("state", "Testopolis2");
            insertIntent.putExtra("State", "Testopolis3");

            // Not working at all... No "Zip" constant
            insertIntent.putExtra("zip", "12345");
            insertIntent.putExtra("ZIP", "11231");
            insertIntent.putExtra("Zip", "12134");
            insertIntent.putExtra("zipcode", "12314");
            insertIntent.putExtra("zip_code", "12341");
            insertIntent.putExtra("zipCode", "12434");
            insertIntent.putExtra("postal_code", "14234");
            insertIntent.putExtra("post_code", "11234");
            insertIntent.putExtra("postCode", "12234");
            insertIntent.putExtra("postalCode", "12334");
            insertIntent.putExtra("postalcode", "12344");

            // The "Postal" constant that puts everything into the "Street" field
            insertIntent.putExtra(ContactsContract.Intents.Insert.POSTAL, "1234 TestRun Drive\n Testopolis5\n Testerland\n 55421\n USA");
            startActivity(insertIntent);

【问题讨论】:

【参考方案1】:

您可以创建一个实现Parcelable 接口的数据类。 之后,您可以将整个对象从一个活动移动到另一个活动,保留所有类方法和能力。

例如,

首先,创建一个实现Parcelable的数据类。

public class Property implements Parcelable 
  ...

在第一个活动中创建您的意图对象并使用putExtra 方法将整个类添加为额外的。

Intent intent = new Intent(MainActivity.this, DetailActivity.class);
intent.putExtra("Property", property);
startActivity(intent);

现在您处于第二个活动中,您需要收集 intent 对象并提取已转换为 parcel 的属性类。

//collect our intent
Intent intent = getIntent();
Property property = intent.getParcelableExtra("Property");

结帐教程Transfer Data between Activities with Android Parcelable了解更多详情。

【讨论】:

感谢您的信息!不过,我认为这对我没有帮助。我不知道如何从联系人应用程序访问数据。我的意图是启动三星存储的联系人应用程序(或任何其他联系人应用程序)。

以上是关于如何在另一个应用程序中找到字段的意图键(尝试添加额外的联系信息但找不到键)的主要内容,如果未能解决你的问题,请参考以下文章

在多重映射中,当两个迭代器保存具有映射到不同 Value 的相同键的值时。我们如何才能在地图中找到它们中的哪一个在另一个之前

在 iOS 中以编程方式在另一个文本字段下方添加文本字段

如何根据在另一个模型中的 Many2many 字段中添加或删除数据自动在模型中创建记录

Acumatica:触发器在另一个自定义按钮上保存验证

将一个表中的数据字段移动到另一个表

如何将 URI 传递给意图?