2011-02-02 3 views
2

У меня точно такая же проблема, как описано here.Прикрепить изображение к контакту

Я пытаюсь использовать это Намерение: android.provider.ContactsContract.Intents.ATTACH_IMAGE

Starts an Activity that lets the user pick a contact to attach an image to.
Sounds подходит ко мне, но, к сожалению, приводит к ActivityNotFoundException.

Код:

import android.provider.ContactsContract; 
... 
try { 
    Intent myIntent = new Intent(); 
    myIntent.setAction(ContactsContract.Intents.ATTACH_IMAGE); 
    myIntent.setData(imageUri); 
    startActivity(myIntent); 
} catch (ActivityNotFoundException anfe) { 
    Log.e("ImageContact", 
      "Firing Intent to set image as contact failed.", anfe); 
    showToast(this, "Firing Intent to set image as contact failed."); 
} 

Я не могу найти ошибку в коде выше. imageUri является правильным для следующего кода работает отлично:

Код:

try { 
    Intent myIntent = new Intent(); 
    myIntent.setAction(Intent.ACTION_ATTACH_DATA); 
    myIntent.setData(imageUri); 
    startActivity(myIntent); 
} catch (ActivityNotFoundException anfe) { 
    Log.e("ImageContact", 
      "Firing Intent to set image as contact failed.", anfe); 
    showToast(this, "Firing Intent to set image as contact failed."); 
} 

Как уже упоминалось в связи это приводит к другому меню, прежде чем попасть к контактам. Это приемлемо, но не идеально.

ответ

0

У меня тоже есть эта проблема. У меня был еще больший успех, установив Uri, используя следующий код, взятый из http://developer.android.com/guide/topics/providers/content-providers.html

Однако после выбора контакта и обрезки изображения значок нового контакта все еще не установлен?

// Save the name and description of an image in a ContentValues map. 
ContentValues values = new ContentValues(3); 
values.put(Media.DISPLAY_NAME, "road_trip_1"); 
values.put(Media.DESCRIPTION, "Day 1, trip to Los Angeles"); 
values.put(Media.MIME_TYPE, "image/jpeg"); 

// Add a new record without the bitmap, but with the values just set. 
// insert() returns the URI of the new record. 
Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values); 

// Now get a handle to the file for that record, and save the data into it. 
// Here, sourceBitmap is a Bitmap object representing the file to save to the database. 
try { 
    OutputStream outStream = getContentResolver().openOutputStream(uri); 
    sourceBitmap.compress(Bitmap.CompressFormat.JPEG, 50, outStream); 
    outStream.close(); 
} catch (Exception e) { 
    Log.e(TAG, "exception while writing image", e); 
} 
+0

Кажется, что отлично работает с 1,6, 2,1, 2,2 - 2,0,1, похоже, ошибка связана с тем, что контактное изображение нельзя установить вручную из изображения галереи. – App8ite

+0

Thx для вашего ответа. Вы идете обходным путем, считывая идентификаторы контактов и прикрепляя изображение напрямую или все еще используете намерение «android.provider.ContactsContract.Intents.ATTACH_IMAGE»? Читая страницу содержания-поставщика, мне кажется, мне нужно будет создать собственный список контактов, чтобы получить идентификаторы, а затем позволить пользователю выбрать один, а затем перезаписать его/ее изображение. Или я чего-то не понимаю? – Redfox

+0

Я использую Intent (Intent.ACTION_ATTACH_DATA), дает мне два намеренных действия для установки значка контакта и обоев, которые я использовал. Извините, не может помочь вам с проблемой ID контактов. – App8ite

1

Если вы уже знаете, путь к файлу, вы можете использовать:

values.put(Images.Media.DISPLAY_NAME, fileName); 
values.put(Images.Media.DATE_ADDED, currentTime); 
values.put(Images.Media.MIME_TYPE, "image/jpeg"); 
values.put(Images.Media.ORIENTATION, 0); 
values.put(Images.Media.DATA, filePath); 
values.put(Images.Media.SIZE, size); 

getContentResolver().insert(Images.Media.EXTERNAL_CONTENT_URI, values); 

Этот способ не Нид открыть поток битовой карты, если у вас уже есть файл.