我正在使用Contacts.Photo.PHOTO
列android.provider.ContactsContact.Contacts
类来获取手机联系人的照片。我的应用程序的最小sdk版本是10,所以当使用这个常量时,它会警告我在11中添加了这个API(当前是10分钟)'。我检查了Android文档和发现这个常量是在API 11中添加的,但是它非常令人惊讶,它在具有Android 2.3.6(即sdk 10)的设备中运行良好。
这怎么可能?
看我的代码:
Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, someContactId);
Uri photoUri = Uri.withAppendedPath(contactUri, Contacts.Photo.CONTENT_DIRECTORY);
Cursor cursor = getContentResolver().query(photoUri, new String[] {Contacts.Photo.PHOTO}, null, null, null);
Log.d(null, cursor.getColumnName(0)); //This returns 'data15' column.
cursor.moveToFirst(); // considering cursor is not null
Byte[] data = cursor.getBlob(0);
InputSteam inputStream = new ByteArrayInputStream(data);
Bitmap bitmapImage = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(bitmapImage); //imageView is of ImageView object i.e. displayed in view.
我的min-sdkversion为10,target-sdkversion为10.
同样的事情发生在Intents.Insert.DATA
类
android.provider.ContactsContact.Intents
常量
答案 0 :(得分:0)
Eclipse突出显示警告/错误。它也强调了它可能的解决方案。这对开发人员来说是件好事。
从那里我可以知道,当应用程序构建为支持API 10以后,如果API级别10中没有任何API(相当恒定),那么该常量值将被硬编码插入代码中。因此,apk本身使用每个API级别的硬编码常量生成。那时不应该进行参考。
使用Contacts.Photo.PHOTO
API也会发生同样的事情。
您也可以尝试使用代码。使用上面的API保持min sdk版本10和目标sdk版本。