Android ContactsConontract并构建多个SDK版本

时间:2010-01-11 21:13:33

标签: java android contacts

我需要在所有Android版本上运行我的应用,但在2.0中更改了联系人API。

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

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

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

1 个答案:

答案 0 :(得分:8)

您可以使用Java Reflection在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) {
}