Android 更改联系人';安卓上有什么图片?
我正在尝试在android上更改联系人的照片,我正在使用以下代码: ? 但是它不起作用。。 我正在显示一个联系人列表,当用户单击其中一个联系人时,它的照片应该被更改为参考资料中的照片。 这是我的全部代码:Android 更改联系人';安卓上有什么图片?,android,contacts,Android,Contacts,我正在尝试在android上更改联系人的照片,我正在使用以下代码: ? 但是它不起作用。。 我正在显示一个联系人列表,当用户单击其中一个联系人时,它的照片应该被更改为参考资料中的照片。 这是我的全部代码: public class ContactFacesActivity extends ListActivity { ArrayList<Contact> Contacts; ContentResolver cr; /** Called when the a
public class ContactFacesActivity extends ListActivity {
ArrayList<Contact> Contacts;
ContentResolver cr;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Contacts = new ArrayList<Contact>();
cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Contacts.add(new Contact(name, id));
}
}
setListAdapter(new ArrayAdapter<Contact>(ContactFacesActivity.this, android.R.layout.simple_list_item_1, Contacts));
}
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Bitmap temp = ((BitmapDrawable)getResources().getDrawable(R.drawable.house)).getBitmap();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
temp.compress(CompressFormat.JPEG, 90 , bos);
byte[] bitmapdata = bos.toByteArray();
setPhoto(Uri.withAppendedPath( ContactsContract.Contacts.CONTENT_URI, Contacts.get(position).getID()), bitmapdata);
}
public void setPhoto(Uri personUri, byte[] photo) {
ContentValues values = new ContentValues();
int photoRow = -1;
String where = ContactsContract.Data.RAW_CONTACT_ID + " == " +
ContentUris.parseId(personUri) + " AND " + Data.MIMETYPE + "=='" +
ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'";
Cursor cursor = getContentResolver().query
(ContactsContract.Data.CONTENT_URI, null, where, null, null);
int idIdx = cursor.getColumnIndexOrThrow
(ContactsContract.Data._ID);
if(cursor.moveToFirst()){
photoRow = cursor.getInt(idIdx);
}
cursor.close();
values.put(ContactsContract.Data.RAW_CONTACT_ID,
ContentUris.parseId(personUri));
values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, photo);
values.put(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
if(photoRow >= 0){
getContentResolver().update
(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Data._ID
+ " = " + photoRow, null);
} else {
getContentResolver().insert
(ContactsContract.Data.CONTENT_URI, values);
}
}
}
公共类ContactFacesActivity扩展了ListActivity{
ArrayList联系人;
内容分解器cr;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
联系人=新的ArrayList();
cr=getContentResolver();
Cursor cur=cr.query(ContactsContract.Contacts.CONTENT_URI,null,null,null);
如果(cur.getCount()>0){
while(cur.moveToNext()){
字符串id=cur.getString(cur.getColumnIndex(ContactsContract.Contacts._id));
字符串名称=cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_name));
if(Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)))>0{
联系人。添加(新联系人(姓名、id));
}
}
setListAdapter(新的ArrayAdapter(ContactFacesActivity.this,android.R.layout.simple_list_item_1,Contacts));
}
}
@凌驾
受保护的void onListItemClick(列表视图l、视图v、整数位置、长id){
super.onListItemClick(左、右、位置、id);
位图温度=((BitmapDrawable)getResources().getDrawable(R.drawable.house)).getBitmap();
ByteArrayOutputStream bos=新建ByteArrayOutputStream();
临时压缩(CompressFormat.JPEG,90,bos);
字节[]位图数据=bos.toByteArray();
setPhoto(Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_Uri,Contacts.get(position.getID()),bitmapdata);
}
public void setPhoto(Uri personUri,字节[]photo){
ContentValues=新的ContentValues();
int photoRow=-1;
字符串,其中=contacts contract.Data.RAW\u CONTACT\u ID+“==”+
ContentUris.parseId(personUri)+”和“+Data.MIMETYPE+”==”+
Contacts contract.CommonDataTypes.Photo.CONTENT_ITEM_TYPE+“”;
Cursor Cursor=getContentResolver().query
(contacts contract.Data.CONTENT_URI,null,where,null,null);
int idIdx=cursor.getColumnIndexOrThrow
(联系人合同数据。\u ID);
if(cursor.moveToFirst()){
photoRow=cursor.getInt(idIdx);
}
cursor.close();
value.put(contacts contract.Data.RAW\u CONTACT\u ID,
parseId(personUri));
value.put(contacts contract.Data.IS_SUPER_PRIMARY,1);
value.put(contacts contract.commondatatypes.Photo.Photo,Photo);
value.put(contacts contract.Data.MIMETYPE,
Contacts contract.CommonDataTypes.Photo.CONTENT\u ITEM\u TYPE);
如果(照片行>=0){
getContentResolver().update
(ContactsContract.Data.CONTENT\u URI、值、ContactsContract.Data.\u ID
+“=”+照片行,空);
}否则{
getContentResolver().insert
(contacts contract.Data.CONTENT_URI,值);
}
}
}
获取您的Uri联系人:
Uri iContactUri = null;
Cursor iContactCursor = managedQuery(
RawContacts.CONTENT_URI,
new String[] {RawContacts._ID},
RawContacts.CONTACT_ID + " = " + contactData.getLastPathSegment(),
null,
null);
if(!iContactCursor.isAfterLast()) {
iContactCursor.moveToFirst();
iContactUri = RawContacts.CONTENT_URI.buildUpon().appendPath(""+iContactCursor.getLong(0)).build();
}
ContactCursor.close();
然后是位图
Bitmap bit; // <-- put your bitmap here
ByteArrayOutputStream streamy = new ByteArrayOutputStream();
bit.compress(CompressFormat.PNG, 0, streamy);
byte[] photo = streamy.toByteArray();
显示
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
这个答案是一段时间前Krylez答案的粗略复制。你应该在评论中链接它:
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>