Как программно обновить изображение контакта в Android? - PullRequest
0 голосов
/ 07 января 2019

Я создаю код для программного обновления изображения изображения в моем телефоне Android. Я перепробовал много методов, но ни одно из решений не помогло мне.

Я получаю содержимое изображения как byteArray из моего последнего действия, а затем преобразую его в Bitmap, и они сжимают его, а затем снова преобразуют в ByteArray и передают его вышеуказанному методу.

Все еще не повезло. Не обновляется фотография выбранного контакта. Что я делаю не так в этом сценарии?

    This is my method 

    public void changeContactImage(String contactId, byte[] b_array) {

    Log.d("Bitmap_Arrrrray", b_array.toString());

    ArrayList<ContentProviderOperation> ops = new ArrayList < > ();

    ops.add(ContentProviderOperation
            .newUpdate(
                    ContactsContract.Data.CONTENT_URI)
            .withSelection(
                    ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?",

                    new String[] {
                            contactId,
                            ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE

                    })
            //.withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1)
            //.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
            //.withValue(ContactsContract.CommonDataKinds.Photo.DATA15,  b_array).build());
            .withValue(ContactsContract.Contacts.Photo.DATA15, b_array).build());



    try {

        getApplicationContext().getContentResolver().
                applyBatch(ContactsContract.AUTHORITY, ops);

    } catch (RemoteException e) {
        Log.d("RemoteException", e.toString());
    } catch (OperationApplicationException e) {
        Log.d("OperationException", e.toString());
    }

}






Calling the above method will be like

       Bitmap_Array = getIntent().getByteArrayExtra("contact_image");

       bmp = BitmapFactory.decodeByteArray(Bitmap_Array, 0, Bitmap_Array.length);

      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      bmp.compress(Bitmap.CompressFormat.JPEG, 80, baos);
      TMP_Bitmap_Array = baos.toByteArray();
      LV_Contacts.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

          //  bitmap = (Bitmap)getIntent().getParcelableExtra("Bitmap");

          //  save_to_contact(bitmap);

              String C_Id = String.valueOf(parent.getItemIdAtPosition(position));


            changeContactImage(C_Id, Bitmap_Array );



        }
    });
...