Contacts.Photo.PHOTO Constant在API 10中正常工作

时间:2016-02-19 05:53:10

标签: android photo contactscontract

我正在使用Contacts.Photo.PHOTOandroid.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常量

1 个答案:

答案 0 :(得分:0)

Eclipse突出显示警告/错误。它也强调了它可能的解决方案。这对开发人员来说是件好事。
从那里我可以知道,当应用程序构建为支持API 10以后,如果API级别10中没有任何API(相当恒定),那么该常量值将被硬编码插入代码中。因此,apk本身使用每个API级别的硬编码常量生成。那时不应该进行参考。
使用Contacts.Photo.PHOTO API也会发生同样的事情。

您也可以尝试使用代码。使用上面的API保持min sdk版本10和目标sdk版本。