Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过contacts api在android中设置照片_Android_Api_Contacts_Photo - Fatal编程技术网

如何通过contacts api在android中设置照片

如何通过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,它告诉我找到了

我是开发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方法

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);