How to get android mobile phone contacts and display them by letter (3): android contacts

Source: Internet
Author: User

How to get android mobile phone contacts and display them by letter (3): android contacts

If you get the contact Profile and display it:

How to obtain bitmap Based on photoId:

public static Bitmap getContactPhoto(Context context, long photoId, BitmapFactory.Options options) {        if (photoId < 0) {            return null;        }        Cursor cursor = null;        try {            cursor = context.getContentResolver().query(                    ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, photoId),                    new String[] { Photo.PHOTO }, null, null, null);            if (cursor != null && cursor.moveToFirst() && !cursor.isNull(0)) {                byte[] photoData = cursor.getBlob(0);                               if (options == null) {                    options = new BitmapFactory.Options();                }                options.inTempStorage = new byte[16 * 1024];                options.inSampleSize = 2;                return BitmapFactory.decodeByteArray(photoData, 0, photoData.length, options);            }        } catch (java.lang.Throwable error) {        } finally {            if (cursor != null) {                cursor.close();            }        }        return null;    }


Add the following to bindView:

protected void setContactPhoto(Cursor cursor, final ImageView viewToUse, int column) {long photoId = 0;if (!cursor.isNull(column)) {photoId = cursor.getLong(column);}final int position = cursor.getPosition();viewToUse.setTag(new PhotoInfo(position, photoId));if (photoId == 0) {viewToUse.setImageResource(R.drawable.avatar);} else {Bitmap photo = null;SoftReference<Bitmap> ref = mBitmapCache.get(photoId);if (ref != null) {photo = ref.get();if (photo == null) {mBitmapCache.remove(photoId);}}if (photo != null) {viewToUse.setImageBitmap(photo);} else {viewToUse.setImageResource(R.drawable.avatar);mItemsMissingImages.add(viewToUse);if (mScrollState != OnScrollListener.SCROLL_STATE_FLING) {sendFetchImageMessage(viewToUse);}}}}

How to get the Avatar:

private class ImageLoaderHandler extends Handler {@Overridepublic void handleMessage(Message message) {if (isFinishing()) {return;}switch (message.what) {case FETCH_IMAGE_MSG: {final ImageView imageView = (ImageView) message.obj;if (imageView == null) {break;}final PhotoInfo info = (PhotoInfo) imageView.getTag();if (info == null) {break;}final long photoId = info.photoId;if (photoId == 0) {break;}SoftReference<Bitmap> photoRef = mBitmapCache.get(photoId);if (photoRef == null) {break;}Bitmap photo = photoRef.get();if (photo == null) {mBitmapCache.remove(photoId);break;}synchronized (imageView) {final PhotoInfo updatedInfo = (PhotoInfo) imageView.getTag();long currentPhotoId = updatedInfo.photoId;if (currentPhotoId == photoId) {imageView.setImageBitmap(photo);mItemsMissingImages.remove(imageView);} else {}}break;}}}public void clearImageFecthing() {removeMessages(FETCH_IMAGE_MSG);}}private class ImageLoader implements Runnable {long mPhotoId;private ImageView mImageView;public ImageLoader(long photoId, ImageView imageView) {this.mPhotoId = photoId;this.mImageView = imageView;}public void run() {if (isFinishing()) {return;}if (Thread.interrupted()) {return;}if (mPhotoId < 0) {return;}Bitmap photo = ContactsUtils.getContactPhoto(getBaseContext(),mPhotoId, null);if (photo == null) {return;}mBitmapCache.put(mPhotoId, new SoftReference<Bitmap>(photo));if (Thread.interrupted()) {return;}Message msg = new Message();msg.what = FETCH_IMAGE_MSG;msg.obj = mImageView;mHandler.sendMessage(msg);}}

Download the Avatar to start the thread pool:

private void processMissingImageItems(AbsListView view) {for (ImageView iv : mItemsMissingImages) {sendFetchImageMessage(iv);}}protected void sendFetchImageMessage(ImageView view) {final PhotoInfo info = (PhotoInfo) view.getTag();if (info == null) {return;}final long photoId = info.photoId;if (photoId == 0) {return;}mImageFetcher = new ImageLoader(photoId, view);synchronized (ContactsList.this) {if (sImageFetchThreadPool == null) {sImageFetchThreadPool = Executors.newFixedThreadPool(3);}sImageFetchThreadPool.execute(mImageFetcher);}}public void clearImageFetching() {synchronized (ContactsList.this) {if (sImageFetchThreadPool != null) {sImageFetchThreadPool.shutdownNow();sImageFetchThreadPool = null;}}mHandler.clearImageFecthing();}

We can optimize the download, and only go down when the list is static. This allows adatper to inherit OnScrollListener, so there are two overload functions:

<span style="white-space:pre"></span>@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {if (SCROLL_STATE_TOUCH_SCROLL == scrollState) {                View currentFocus = getCurrentFocus();                if (currentFocus != null) {                    currentFocus.clearFocus();                }            }mScrollState = scrollState;if (scrollState == OnScrollListener.SCROLL_STATE_FLING) {clearImageFetching();} else {processMissingImageItems(view);}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {}

When the activity is destroyed, we have to release the resource:

@Overrideprotected void onDestroy() {super.onDestroy();if (mQueryHandler != null) {mQueryHandler.cancelOperation(QUERY_TOKEN);mQueryHandler = null;}if (mAdapter != null && mAdapter.mItemsMissingImages != null) {mAdapter.mItemsMissingImages.clear();mAdapter.clearMessages();}// Workaround for Android Issue 8488// http://code.google.com/p/android/issues/detail?id=8488if (mAdapter != null && mAdapter.mBitmapCache != null) {for (SoftReference<Bitmap> bitmap : mAdapter.mBitmapCache.values()) {if (bitmap != null && bitmap.get() != null) {bitmap.get().recycle();bitmap = null;}}mAdapter.mBitmapCache.clear();}}

Code: http://download.csdn.net/detail/baidu_nod/7774203


How can I find contacts in alphabetical order on my Android phone?

When you click on the screen, a menu appears. You choose to add a contact to the desktop.


In android, how does one obtain all the numbers and Corresponding names of contacts on the local mobile phone through a program?

Contentprovider
 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.