如何通过contacts api在android中设置照片
我是开发android应用程序的新手,目前正在尝试做以下工作: 在所有联系人的笔记中搜索特定字符串(如:“E-Plus”),如果找到,则放置特定图标(如E-Plus徽标)作为其联系人照片 我使用eclipse和以下测试AVD使其正常工作: 平台:安卓2.3.3 空气污染指数水平:10 CPU/ABI:ARM(armeabi) 现在,当我将eclipse生成的*.apk文件复制到我的三星Galaxy S2时,该应用程序只能部分工作。 在搜索所有联系人后,我添加了一行来显示toast,它告诉我找到了多少具有特定字符串的联系人。当我在实际的Galaxy S2上执行应用程序时,这个数字是正确的 但与测试环境相反,该应用程序不会在事后设置照片。该应用程序也不会崩溃。 然后我想,作为第一种方法,设置一张照片可能太难了,所以我也试着添加一个电话号码——同样的结果。 在测试环境中正确添加了电话号码,但在我的实际手机上没有添加 我在手机上尝试了谷歌联系人和普通的电话簿条目联系人,以在其详细信息中包含特定的注释。 这两个都被应用程序正确地找到(即已读取便笺并找到字符串),但在运行应用程序后,他们都没有设置照片或电话号码 以下是我的工作: 以下代码应加载所有联系人并保存其id和备注。请注意,ContactInfo只是一个简单的类,包含用于保存contactId等的变量(String contactId、String Note、Byte[]Photo)以及相应的get和set方法如何通过contacts api在android中设置照片,android,api,contacts,photo,Android,Api,Contacts,Photo,我是开发android应用程序的新手,目前正在尝试做以下工作: 在所有联系人的笔记中搜索特定字符串(如:“E-Plus”),如果找到,则放置特定图标(如E-Plus徽标)作为其联系人照片 我使用eclipse和以下测试AVD使其正常工作: 平台:安卓2.3.3 空气污染指数水平:10 CPU/ABI:ARM(armeabi) 现在,当我将eclipse生成的*.apk文件复制到我的三星Galaxy S2时,该应用程序只能部分工作。 在搜索所有联系人后,我添加了一行来显示toast,它告诉我找到了
public ArrayList<ContactInfo> loadAllContacts(ContentResolver cr) {
ArrayList<ContactInfo> contactList = new ArrayList<ContactInfo>();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String contactId = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
ContactInfo contactInfo = new ContactInfo(contactId);
// Get Note
String where = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
String[] whereParams = new String[]{contactId,ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE};
Cursor noteCur = cr.query(ContactsContract.Data.CONTENT_URI, null, where, whereParams, null);
if (noteCur.moveToFirst()) {
String note = noteCur.getString(noteCur.getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE));
contactInfo.setNote(note);
}
noteCur.close();
contactList.add(contactInfo);
}
}
return contactList;
}
最后,我在主要例程中执行的是:
ArrayList<ContactInfo> contactList = new ArrayList<ContactInfo>();
ContactsAccessor contactsAccessor = new ContactsAccessor();
contactList = contactsAccessor.loadAllContacts(getContentResolver());
int test = 0;
for (int i=0; i<contactList.size(); i++) {
ContactInfo contact = contactList.get(i);
String note = contact.getNote();
if (note.contains("TESTSHRAZAAM")) {
contact.setPhoneNumber("12345");
contact.setPhoto(ImageHandler.getByteArrayFromResource(getResources(),R.drawable.ic_eplus));
test = test+1;
}
}
contactsAccessor.updateAllContacts(getContentResolver(), contactList);
if (test>0) Toast.makeText(WelchesNetzIcons.this,"Es wurden "+test+" Icons gesetzt.", Toast.LENGTH_SHORT).show();
else Toast.makeText(WelchesNetzIcons.this, "Es wurden keine Icons gesetzt.", Toast.LENGTH_SHORT).show();
ArrayList contactList=new ArrayList();
ContactsAccessor ContactsAccessor=新的ContactsAccessor();
contactList=contactsAccessor.loadAllContacts(getContentResolver());
int检验=0;
对于(inti=0;i0)Toast.makeText(WelchesNetzIcons.this,“Es wurden”+test+“Icons gesetzt.”,Toast.LENGTH_SHORT.show();
else Toast.makeText(WelchesNetzIcons.this,“Es wurden keine Icons gesetzt.”,Toast.LENGTH_SHORT.show();
我非常感谢任何关于我在这里可能做错什么的建议。此外,我尽量做到准确,但如果您有兴趣或需要任何进一步的信息,请随时询问
非常感谢你努力帮助我
致以最诚挚的问候,Niklas请尝试使用此代码。它对我有用 您的问题可能是联系人id错误或mimetype错误 //寻找联系人
String select = String.format("%s=? AND %s='%s'", Phone.NUMBER, Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
String[] project = new String[] { Data.RAW_CONTACT_ID };
Cursor c = context.getContentResolver().query(Data.CONTENT_URI, project, select, new String[] { contact.getPhone() }, null);
if(c.moveToFirst()){
rawContactId = c.getLong(c.getColumnIndex(Data.RAW_CONTACT_ID));
}
//set photo
Bitmap bit = //your photo
ByteArrayOutputStream streamy = new ByteArrayOutputStream();
bit.compress(CompressFormat.PNG, 0, streamy);
byte[] photo = streamy.toByteArray();
ContentValues values = new ContentValues();
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
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);
ContactHelper.context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
尝试使用此代码。它对我有用 您的问题可能是联系人id错误或mimetype错误 //寻找联系人
String select = String.format("%s=? AND %s='%s'", Phone.NUMBER, Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
String[] project = new String[] { Data.RAW_CONTACT_ID };
Cursor c = context.getContentResolver().query(Data.CONTENT_URI, project, select, new String[] { contact.getPhone() }, null);
if(c.moveToFirst()){
rawContactId = c.getLong(c.getColumnIndex(Data.RAW_CONTACT_ID));
}
//set photo
Bitmap bit = //your photo
ByteArrayOutputStream streamy = new ByteArrayOutputStream();
bit.compress(CompressFormat.PNG, 0, streamy);
byte[] photo = streamy.toByteArray();
ContentValues values = new ContentValues();
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
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);
ContactHelper.context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
String select = String.format("%s=? AND %s='%s'", Phone.NUMBER, Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
String[] project = new String[] { Data.RAW_CONTACT_ID };
Cursor c = context.getContentResolver().query(Data.CONTENT_URI, project, select, new String[] { contact.getPhone() }, null);
if(c.moveToFirst()){
rawContactId = c.getLong(c.getColumnIndex(Data.RAW_CONTACT_ID));
}
//set photo
Bitmap bit = //your photo
ByteArrayOutputStream streamy = new ByteArrayOutputStream();
bit.compress(CompressFormat.PNG, 0, streamy);
byte[] photo = streamy.toByteArray();
ContentValues values = new ContentValues();
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
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);
ContactHelper.context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);