Прикрепить изображение к контакту - PullRequest
2 голосов
/ 02 февраля 2011

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

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

Starts an Activity that lets the user pick a contact to attach an image to.
Звучит подходящим для меня, но, к сожалению, приводит к 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.");  
}

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

Ответы [ 2 ]

1 голос
/ 04 февраля 2011

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

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

Таким образом, нет необходимости открывать поток растровых изображений, если у вас уже есть файл.

0 голосов
/ 03 февраля 2011

У меня тоже есть эта проблема. Я добился немного большего успеха, установив 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);
}
...