java - 如何查找另一个应用程序中字段的 Intent 键(尝试添加额外的联系信息但找不到该键)

标签 java android android-intent android-contacts

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

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

我知道可以从 Intent 中获取信息,并且需要特定的 key 来获取该信息。

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

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

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

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

总的来说,我在更新以下字段时遇到了麻烦,因为我不知道它们各自的键:

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

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

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);

最佳答案

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

例如,

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

public class Property implements Parcelable {
  ...
}

在第一个 Activity 中创建您的 Intent 对象,并使用 putExtra 方法将整个类添加为额外内容。

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

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

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

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

关于java - 如何查找另一个应用程序中字段的 Intent 键(尝试添加额外的联系信息但找不到该键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50384056/

相关文章:

android - 克隆现有的 Android Studio 项目

android - 将自定义对象发送到 intent android

android - 单击应用程序小部件(远程 View )中的 ListView 项目未启动 Activity

java - 如何覆盖Gson默认的DateTypeAdapter?

java - 在 asynctask 结束时执行一个函数

java - 从 Java 应用程序登录 MySql

java - 下拉菜单中导航栏内的 RouterLink 不起作用(Angular 和 Springboot)

Android:如何将 View 添加到 WindowManager,并使其始终 float 在我的应用程序顶部?

android - 添加带抽屉导航的操作栏按钮?

java - 如何从java类(不是 Activity ,没有布局)调用方法到 Activity ?