是否可以定位Android 2.1并在使用Android 4.0及更高版本的设备上使用CalendarProvider
,还是只能通过创建 2 单独的APK来实现?
答案 0 :(得分:1)
这取决于你对“目标”的意思。
如果你的意思是“设置targetSdkVersion”到Android 2.1,你仍然可以使用你想要的任何API,只要你在拥有它们的设备上运行时只尝试调用它们。
如果你的意思是“设置构建目标”到Android 2.1,你仍然可以使用你想要的任何API,只要你使用反射来访问比API级别7更新的API。因为CalendarContract
是内容提供商,主要是访问各种静态数据成员,例如CONTENT_URI
。以下是使用反射获取CONTENT_URI
值的示例:
private static Uri CONTENT_URI=null;
static {
int sdk=new Integer(Build.VERSION.SDK).intValue();
if (sdk>=5) {
try {
Class<?> clazz=Class.forName("android.provider.ContactsContract$Contacts");
CONTENT_URI=(Uri)clazz.getField("CONTENT_URI").get(clazz);
}
catch (Throwable t) {
Log.e("PickDemo", "Exception when determining CONTENT_URI", t);
}
}
else {
CONTENT_URI=Contacts.People.CONTENT_URI;
}
}
(注意:此示例旨在在Android 1.5及更高版本上运行 - 取决于您的minSdkVersion
,您可以使用Build.VERSION.SDK_INT
代替new Integer(Build.VERSION.SDK).intValue()
。)
如果用“目标”表示其他内容,那么我们需要澄清您对动词“目标”的使用。