java - 跨多个 SDK 版本的 Android ContactsContract 和构建

标签 java android contacts

我需要我的应用程序在所有 Android 版本上运行,但 Contacts API 在 2.0 中发生了变化。

在 SDK 1.6 及更早版本中,我使用 android.provider.Contacts 来查询联系人数据库,但这在 2.0 中不起作用

相反,对于 2.0,我使用 android.provider.ContactsContract。这带来了一个问题:当我有 ContactsContract 的代码时,我的应用程序将不会为 1.6 及更早版本构建。

我的应用程序是否需要有两个单独的版本(一个用于 <= 1.6,一个用于 2.0 及更高版本),还是有办法避免这样做?

最佳答案

您可以使用 Java 反射在 Android 上支持这两个版本。有趣的是,the answer to your question can be found in a recent question about reflection used to solve this exact problem :

Uri baseUri = Contacts.Phones.CONTENT_FILTER_URL;
try {
    Class<?> c = Class.forName("android.provider.ContactsContract$PhoneLookup");
    baseUri = (Uri) c.getField("CONTENT_FILTER_URI").get(baseUri);
} 
    catch (Exception e) {
}

关于java - 跨多个 SDK 版本的 Android ContactsContract 和构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2044985/

相关文章:

java - 为什么 System.getProperty ("user.dir") 返回 "/"

android - 在android中添加联系人照片

android - 更新与多号码 android 的现有联系人

java - Android - 如何获取对自定义布局中 View 的引用?

java - 代码通过其接口(interface)类型(例如 Set)而不是其实现类型来引用 Collection

java - Rect.intersects 不工作

android - 无法连接到本地服务器

objective-c - CNContact :migration from ABAddressBook : iOSLegacyIdentifier + lastModifcationDate

java - 更改网络后如何解决 'Cannot create PoolableConnectionFactory'异常?

java - Java中 "Unchecked cast"警告的解释