Android 压缩联系人查询代码

Android 压缩联系人查询代码,android,android-contacts,Android,Android Contacts,我这里有一个代码,用于获取和设置联系人的照片、所有电话号码、所有电子邮件以及预定联系人id的所有地址。工作正常,但我相信有一个更简单的方法。感谢您的帮助。谢谢 import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import a

我这里有一个代码,用于获取和设置联系人的照片、所有电话号码、所有电子邮件以及预定联系人id的所有地址。工作正常,但我相信有一个更简单的方法。感谢您的帮助。谢谢

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

import android.app.Activity;
import android.content.ContentUris;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.ContactsContract;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class ContactDetailsTest extends Activity {

    ListView contactDetails;
    TextView tvContactName;
    TextView tvType;
    ImageView ivContactPic;
    ArrayList<ContactItemDetails> details;
    ContactDetailsAdapter adapter;
    // Extras passed from contact name list
    String contactId;
    String contactName;
    // Content list query args
    Uri uri;
    String[] projection, selectionArgs;
    String selection, sortOrder;
    Executor executor = Executors.newCachedThreadPool();
    Handler handler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.contactinfotest);
        ivContactPic = (ImageView) findViewById(R.id.ivContactPic);
        contactId = getIntent().getStringExtra("contactId");
        contactName = getIntent().getStringExtra("contactName");
        tvContactName = (TextView) findViewById(R.id.tvContactName);        
        tvContactName.setText(contactName);
        tvType = (TextView)findViewById(R.id.tvDetailType);


        long contact_Id = Long.parseLong(contactId);
        final Bitmap my_btmp = BitmapFactory.decodeStream(openDisplayPhoto(contact_Id));
        ivContactPic.setImageBitmap(my_btmp);

        contactDetails = (ListView) findViewById(R.id.contactDetailsList);
        details = new ArrayList<ContactItemDetails>();
        adapter = new ContactDetailsAdapter(details, this);
        contactDetails.setAdapter(adapter);

        Runnable phoneRun = new Runnable() {
            @Override
            public void run() {                 
                uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
                projection = null;
                selection = ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                        + " = " + contactId;
                selectionArgs = null;
                sortOrder = null;
                Cursor phoneCursor = getContentResolver().query(uri,
                        projection, selection, selectionArgs, sortOrder);
                if (phoneCursor != null && phoneCursor.getCount() > 0) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            ContactItemDetails contactItemDetails = new ContactItemDetails();
                            contactItemDetails.setNumber("Phone");
                            details.add(contactItemDetails);
                            adapter.notifyDataSetChanged();
                        }
                    });
                    while (phoneCursor.moveToNext()) {
                        final ContactItemDetails contactItemDetails = new ContactItemDetails();
                        if (Integer
                                .parseInt(phoneCursor.getString(phoneCursor
                                        .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                            String number = phoneCursor
                                    .getString(phoneCursor
                                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            int type = phoneCursor
                                    .getInt(phoneCursor
                                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                            String customLabel = phoneCursor
                                    .getString(phoneCursor
                                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.LABEL));
                            String phoneLabel = (String) ContactsContract.CommonDataKinds.Phone
                                    .getTypeLabel(ContactDetailsTest.this
                                            .getResources(), type, customLabel);
                            contactItemDetails.setNumber(number);
                            contactItemDetails.setType(phoneLabel);
                            handler.post(new Runnable() {
                                @Override
                                public void run() {
                                    details.add(contactItemDetails);
                                    adapter.notifyDataSetChanged();
                                }
                            });
                        }
                    }
                }
                if (phoneCursor != null) {
                    phoneCursor.close();
                }
                uri = ContactsContract.CommonDataKinds.Email.CONTENT_URI;
                projection = null;
                selection = ContactsContract.CommonDataKinds.Email.CONTACT_ID
                        + " = " + contactId;
                selectionArgs = null;
                sortOrder = null;
                Cursor emailCursor = getContentResolver().query(uri,
                        projection, selection, selectionArgs, sortOrder);
                if (emailCursor != null && emailCursor.getCount() > 0) {
                    final ContactItemDetails ItemDetails = new ContactItemDetails();
                    ItemDetails.setNumber("Email");
                    ItemDetails.setType("----------");
                    handler.post(new Runnable() {

                        @Override
                        public void run() {

                            details.add(ItemDetails);
                            adapter.notifyDataSetChanged();
                        }
                    });
                    while (emailCursor.moveToNext()) {
                        final ContactItemDetails contactItemDetails = new ContactItemDetails();
                        String eAddress = emailCursor
                                .getString(emailCursor
                                        .getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS));
                        int type = emailCursor
                                .getInt(emailCursor
                                        .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
                        String customLabel = emailCursor
                                .getString(emailCursor
                                        .getColumnIndex(ContactsContract.CommonDataKinds.Email.LABEL));
                        String emailLabel = (String) ContactsContract.CommonDataKinds.Email
                                .getTypeLabel(
                                        ContactDetailsTest.this.getResources(),
                                        type, customLabel);
                        contactItemDetails.setNumber(eAddress);
                        contactItemDetails.setType(emailLabel);
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                details.add(contactItemDetails);
                                adapter.notifyDataSetChanged();
                            }
                        });
                    }
                }
                if (emailCursor != null) {
                    emailCursor.close();
                }
                uri = ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI;
                projection = null;
                selection = ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID
                        + " = " + contactId;
                selectionArgs = null;
                sortOrder = null;
                Cursor addCursor = getContentResolver().query(uri, projection,
                        selection, selectionArgs, sortOrder);
                if (addCursor != null && addCursor.getCount() > 0) {
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            ContactItemDetails contactItemDetails = new ContactItemDetails();
                            contactItemDetails.setNumber("Address");
                            contactItemDetails.setType("----------");
                            details.add(contactItemDetails);
                            adapter.notifyDataSetChanged();
                        }
                    });
                    while (addCursor.moveToNext()) {
                        final ContactItemDetails contactItemDetails = new ContactItemDetails();
                        String address = addCursor
                                .getString(addCursor
                                        .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS));
                        int type = addCursor
                                .getInt(addCursor
                                        .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
                        String customLabel = addCursor
                                .getString(addCursor
                                        .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.LABEL));
                        String addLabel = (String) ContactsContract.CommonDataKinds.StructuredPostal
                                .getTypeLabel(
                                        ContactDetailsTest.this.getResources(),
                                        type, customLabel);
                        contactItemDetails.setNumber(address);
                        contactItemDetails.setType(addLabel);
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                details.add(contactItemDetails);
                                adapter.notifyDataSetChanged();
                            }
                        });
                    }
                }
                if (addCursor != null) {
                    addCursor.close();
                }
            }
        };
        executor.execute(phoneRun);
    }

    public InputStream openDisplayPhoto(long contact_Id) {
        contact_Id = Long.parseLong(contactId);
        Uri contactUri = ContentUris.withAppendedId(
                ContactsContract.Contacts.CONTENT_URI, contact_Id);
        Uri displayPhotoUri = Uri.withAppendedPath(contactUri,
                ContactsContract.Contacts.Photo.DISPLAY_PHOTO);
        try {
            AssetFileDescriptor fd = getContentResolver()
                    .openAssetFileDescriptor(displayPhotoUri, "r");
            return fd.createInputStream();
        } catch (IOException e) {
            return null;
        }
    }
}
import java.io.IOException;
导入java.io.InputStream;
导入java.util.ArrayList;
导入java.util.concurrent.Executor;
导入java.util.concurrent.Executors;
导入android.app.Activity;
导入android.content.ContentUris;
导入android.content.res.AssetFileDescriptor;
导入android.database.Cursor;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.net.Uri;
导入android.os.Bundle;
导入android.os.Handler;
导入android.provider.contacts合同;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.TextView;
公共类ContactDetailsTest扩展活动{
列表视图联系人详细信息;
TextView-tvContactName;
文本视图类型;
图像视图;
ArrayList详细信息;
ContactDetailsAdapter适配器;
//从联系人姓名列表传递的附加项
字符串联系人ID;
字符串contactName;
//内容列表查询参数
Uri;
字符串[]投影,selectionArgs;
字符串选择,排序器;
Executor Executor=Executors.newCachedThreadPool();
Handler=newhandler();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.contactinfotest);
ivContactPic=(ImageView)findViewById(R.id.ivContactPic);
contactId=getIntent().getStringExtra(“contactId”);
contactName=getIntent().getStringExtra(“contactName”);
tvContactName=(TextView)findViewById(R.id.tvContactName);
tvContactName.setText(contactName);
tvType=(TextView)findViewById(R.id.tvDetailType);
long contact_Id=long.parseLong(contactId);
最终位图my_btmp=BitmapFactory.decodeStream(openDisplayPhoto(联系人Id));
ivContactPic.setImageBitmap(我的btmp);
contactDetails=(ListView)findViewById(R.id.contactDetailsList);
详细信息=新的ArrayList();
适配器=新联系人详细信息适配器(详细信息,此);
contactDetails.setAdapter(适配器);
Runnable phoneRun=new Runnable(){
@凌驾
public void run(){
uri=ContactsContract.CommonDataTypes.Phone.CONTENT\u uri;
投影=空;
选择=ContactsContract.CommonDataTypes.Phone.CONTACT\u ID
+“=”+联系人ID;
selectionArgs=null;
sortOrder=null;
游标phoneCursor=getContentResolver().query(uri,
投影、选择、选择、排序);
if(phoneCursor!=null&&phoneCursor.getCount()>0){
handler.post(新的Runnable(){
@凌驾
公开募捐{
ContactItemDetails ContactItemDetails=新的ContactItemDetails();
contactItemDetails.setNumber(“电话”);
详细信息。添加(contactItemDetails);
adapter.notifyDataSetChanged();
}
});
while(phoneCursor.moveToNext()){
最终ContactItemDetails ContactItemDetails=新ContactItemDetails();
if(整数
.parseInt(phoneCursor.getString(phoneCursor
.getColumnIndex(Contacts contract.Contacts.HAS_PHONE_NUMBER))>0){
字符串编号=phoneCursor
.getString(phoneCursor)
.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER));
int type=phoneCursor
.getInt(电话游标)
.getColumnIndex(ContactsContract.CommonDataTypes.Phone.TYPE));
字符串customLabel=phoneCursor
.getString(phoneCursor)
.getColumnIndex(ContactsContract.CommonDataTypes.Phone.LABEL));
字符串phoneLabel=(字符串)ContactsContract.CommonDataTypes.Phone
.getTypeLabel(ContactDetailsTest.this)
.getResources(),类型,自定义标签);
contactItemDetails.setNumber(编号);
contactItemDetails.setType(电话标签);
handler.post(新的Runnable(){
@凌驾
公开募捐{
详细信息。添加(contactItemDetails);
adapter.notifyDataSetChanged();
}
});
}
}
}
如果(phoneCursor!=null){
phoneCursor.close();
}
uri=ContactsContract.CommonDataTypes.Email.CONTENT\u uri;
投影=空;
选择=ContactsContract.CommonDataTypes.Email.CONTACT\u ID
+“=”+联系人ID;
selectionArgs=null;
sortOrder=null;
游标emailCursor=getContentResolver().query(uri,
投影、选择、选择、排序);
if(emailCursor!=null&&emailCursor.getCount()>0){
最终ContactItemDetails=新ContactItemDetails();
项目详情
Uri sendUri = Uri.fromFile(new File(path,name.getText().toString()+".png"));
                Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
                        intent.setDataAndType(sendUri, "image/png");
                        intent.putExtra("mimeType", "image/png");
                        startActivityForResult(Intent.createChooser(intent, "Set As"), 200);
                        Intent i= new Intent(Intent.ACTION_INSERT_OR_EDIT);;
                         i.setType(Contacts.CONTENT_ITEM_TYPE);
                          i.putExtra(Insert.NAME, name.getText().toString());
                          i.putExtra(Insert.PHONE, phno.getText().toString());
                          startActivity(i);