如何检测 android 手机联系人应用程序支持结构化邮政地址?

Posted

技术标签:

【中文标题】如何检测 android 手机联系人应用程序支持结构化邮政地址?【英文标题】:How to detect an android phone contacts app supports Structured Postal Address? 【发布时间】:2014-09-09 17:15:24 【问题描述】:

Samsung Galaxy S4 和某些设备在使用 Intent Action_Insert

时仅支持结构化邮政
ArrayList<ContentValues> data = new ArrayList<ContentValues>();
...
ContentValues name = new ContentValues();
name.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
name.put(StructuredPostal.STREET, bundle.getString(StructuredPostal.STREET));
name.put(StructuredPostal.CITY, bundle.getString(StructuredPostal.CITY));
name.put(StructuredPostal.REGION, bundle.getString(StructuredPostal.REGION));
name.put(StructuredPostal.NEIGHBORHOOD, bundle.getString(StructuredPostal.NEIGHBORHOOD));
name.put(StructuredPostal.POSTCODE, bundle.getString(StructuredPostal.POSTCODE));
name.put(StructuredPostal.COUNTRY, bundle.getString(StructuredPostal.COUNTRY));
data.add(name);
Intent intent = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
intent.putExtra(ContactsContract.Intents.Insert.NAME, contactName);

if(android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.HONEYCOMB)
  intent.putParcelableArrayListExtra(Insert.DATA, data);
else
  intent.putExtra(ContactsContract.Intents.Insert.POSTAL, address);

现在在 4.2 上运行的 Galaxy S3 不支持结构化地址,并且不使用上述代码显示地址。

那么我如何确定设备是否支持结构化邮政地址,以便我可以同时支持这两者?

注意:如果我使用intent.putExtra(ContactsContract.Intents.Insert.POSTAL, address); Galaxy S3 会显示地址,而使用intent.putParcelableArrayListExtra(Insert.DATA, data); 这个S3 无法显示地址。

【问题讨论】:

【参考方案1】:

尝试保存结构化字段(对于支持它们的手机)以及StructuredPostal.FORMATTED_ADDRESS。不过,您需要自己进行格式化。 VCardEntry 似乎就是这样做的。

【讨论】:

以上是关于如何检测 android 手机联系人应用程序支持结构化邮政地址?的主要内容,如果未能解决你的问题,请参考以下文章

Android 如何检测更改了哪个联系人?

如何从 android 手机中提取联系人并将其存储/导入到模拟器中的应用程序中?

如何通过Android手机联系人列表中的代码添加联系人详细信息..?

Android:更改联系人时,带有广播接收器的前台服务停止工作

如何在 Unity 中检测 android 手机旋转?

如何检测更新的android联系人并同步到firestore