[英]How to get contact URI from user phone and load using glide in android
我的要求是我需要通過從用戶手機上獲取來使用滑翔一直加載聯系人圖像,到目前為止我已經實現如下:
以下通過電話或電子郵件 ID 獲取聯系 URI 的方法:
public static Uri getContactURI(Context context, String emailOrMobile) {
Log.v(TAG, "displayContactPic: " + emailOrMobile);
if (emailOrMobile == null) {
Log.w(TAG, "emailOrMobile: " + emailOrMobile);
return null;
}
if (PermissionUtil.checkSelfPermission(context, Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
Log.w(TAG, "permission.READ_CONTACTS is not available! will skip");
return null;
}
Long contactId = null;
if (emailOrMobile.contains("@")) {
contactId = AppUtils.getContactIdByEmail(emailOrMobile, context);
} else {
contactId = AppUtils.getContactIdByPhoneNums(emailOrMobile, context);
}
Log.v(TAG, "contactId: " + contactId);
if (contactId != 0) {
return Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, "" + contactId);
} else {
return null;
}
}
將 getContactURI(contactImgUri) 傳遞給以下方法,以使用如下所示的滑行加載圖片
Glide.with(context)
.load(contactImgUri)
.apply(RequestOptions.circleCropTransform())
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
//Log.d(TAG, " onLoadFailed Exception: " + e);
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, com.bumptech.glide.load.DataSource dataSource, boolean isFirstResource) {
return false;
}
})
.into(imageView);
圖像正在加載,但在 android studio log-cat 中,我看到打印了太多日志,如下所示:
W/Glide:加載失敗,內容為://com.android.contacts/contacts/513,大小為 [88x88] class com.bumptech.glide.load.engine.GlideException:無法加載資源有 3 個原因:Glide:Root原因 (1 of 3) java.io.FileNotFoundException: InputStream is null for content://com.android.contacts/contacts/513
Glide:根本原因(3 個中的 2 個)java.io.FileNotFoundException:此 URI 不支持流 I/O。; URI:content://com.android.contacts/contacts/513,調用用戶:android.uid.shared:10041,調用包為以下之一:[com.android.providers.blockednumber, com.android.providers.userdictionary, com.android.providers.contacts, com.android.calllogbackup] 在 android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:149)
Glide:根本原因(3 個中的 3 個)java.io.FileNotFoundException:此 URI 不支持流 I/O。; URI:content://com.android.contacts/contacts/513,調用用戶:android.uid.shared:10041,調用包為以下之一:[com.android.providers.blockednumber, com.android.providers.userdictionary, com.android.providers.contacts, com.android.calllogbackup] 在 android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:149)
如果我有 1000 多個聯系人並且在 log-cat 中我可以看到太多這樣的日志被打印,我正在尋找一種解決方案來避免上述日志或警告。
任何幫助表示贊賞!
found below solution as below
InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(), contactImgUri);
if (is == null) {
Log.d(TAG,"contact pic not readable");
// Your contact doesn't have a valid photo
// i.e. use the default photo for your app
}
} else {
Log.d(TAG,"contact pic readable");
// This will always succeed when assigned to an ImageView!
photoUri = Uri.withAppendedPath(contactImgUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
Glide.with(context)
.load(photoUri)
.apply(RequestOptions.circleCropTransform())
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
//Log.d(TAG, " onLoadFailed Exception: " + e);
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, com.bumptech.glide.load.DataSource dataSource, boolean isFirstResource) {
return false;
}
})
.placeholder(R.drawable.ic_person)
.error(R.drawable.ic_person)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.skipMemoryCache(true)
.into(imageView);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.