Java 访问空联系人照片时KitKat ANR
对于我的应用程序,我从ContactsContract API中读取联系人的照片,该API在Android KitKat之前运行良好。我在4.4更改日志中找不到有关ContactsContract.Contacts.openContactPhotoInputStream()方法更改的任何具体信息,但我只能在KitKat上以及该联系人没有照片时复制此信息 我从联系人那里读到:Java 访问空联系人照片时KitKat ANR,java,android,contactscontract,Java,Android,Contactscontract,对于我的应用程序,我从ContactsContract API中读取联系人的照片,该API在Android KitKat之前运行良好。我在4.4更改日志中找不到有关ContactsContract.Contacts.openContactPhotoInputStream()方法更改的任何具体信息,但我只能在KitKat上以及该联系人没有照片时复制此信息 我从联系人那里读到: public static Bitmap getContactPhoto(final Uri lookupUri, fin
public static Bitmap getContactPhoto(final Uri lookupUri, final Context context, boolean preferHighRes)
throws IOException, OutOfMemoryError, NullPointerException{
InputStream photo_stream = ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(),
lookupUri, preferHighRes);
BufferedInputStream input = new BufferedInputStream(photo_stream);
Bitmap contactImg = BitmapFactory.decodeStream(input);
input.close();
return contactImg;
}
此方法的调用方式如下所示:
private class retrieveContactPhoto extends AsyncTask<Void, Void, Bitmap> {
Uri contactUri;
ImageView imageView;
public retrieveContactPhoto(Uri contactUri, ImageView iView){
this.contactUri = contactUri;
this.imageView = iView;
}
@Override
protected void onPreExecute(){
imageView.setImageResource(R.drawable.friend_image_default);
}
@Override
protected Bitmap doInBackground(Void... params) {
Bitmap image;
try {
image = ContactLookup.getContactPhoto(contactUri, mContext, true);
} catch (Exception e) {
image = null;
}
return image;
}
@Override
protected void onPostExecute(Bitmap image) {
if(image!=null){
imageView.setImageBitmap(image);
}
}
}
我不知道为什么它现在说流被关闭,因为这在任何其他版本的Android上都不会发生。此外,如果此错误不在工作线程中,则仍然会出现。您可以尝试对代码进行一些小的更改吗?我有一个类似的问题——我的应用程序只是停留在一个无限循环中 试试这个:
InputStream photo_stream = ContactsContract.Contacts.openContactPhotoInputStream((ContentResolver) getContentResolver().query(ContactData, null, null, null, null),lookupUri, preferHighRes);
这对我很有效。如果联系人未设置和照片,则您必须使用联系人的默认照片,您可以通过以下路径找到该照片: \android sdk\platforms\android-v\data\res\drawable-\ic\u contact\u图片。巴布亚新几内亚
你找到解决办法了吗?我也有类似的问题。ANR根据4.4中的联系人照片
InputStream photo_stream = ContactsContract.Contacts.openContactPhotoInputStream((ContentResolver) getContentResolver().query(ContactData, null, null, null, null),lookupUri, preferHighRes);