Android 压缩联系人查询代码
我这里有一个代码,用于获取和设置联系人的照片、所有电话号码、所有电子邮件以及预定联系人id的所有地址。工作正常,但我相信有一个更简单的方法。感谢您的帮助。谢谢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
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);