2

это мой код, где я хочу прикрепить изображение к электронной почте и отправить его.transactiontoolargeexception при отправке изображения по электронной почте через намерение дополнительно

String receiverEmail = receiver.getText().toString().trim(); 
    String to[] = {receiverEmail}; 
    Intent intent = new Intent(Intent.ACTION_SEND); 
    intent.setData(Uri.parse("mailto:")); 
    intent.setType("imge/jpeg"); 
    intent.putExtra(Intent.EXTRA_EMAIL, to); 
    intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); 
    intent.putExtra(Intent.EXTRA_TEXT, "hello wats up"); 
    intent.putExtra(Intent.EXTRA_STREAM, bitmap); 
    startActivity(intent); 

Я получаю ошибку, которая говорит

Caused by: android.os.TransactionTooLargeException: data parcel size 1331968 bytes 

Эта проблема с файлом растрового. Как уменьшить размер.? Помогите мне с этим вопросом. Заранее спасибо.

{ 
oncreate method.... 
I have my bitmap here created with instance name bitmap which i want to send in email attachment 
Uri bitmapUri = getImageUri(OutgoingEmbededImage.this, bitmap); //null pointer exception error here 
String bitmapPath = getPathOfUri(bitmapUri); 
end of on create method 
} 

//getting bitmapUri here 
private Uri getImageUri(Context context, Bitmap myBitmap){ 
ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
String path = MediaStore.Images.Media.insertImage(context.getContentResolver(), myBitmap, "Image", null); 
return Uri.parse(path); 
} 

//string path here 
public String getPathOfUri(Uri uri){ 
    Cursor cursor = getContentResolver().query(uri, null, null, null, null); 
    cursor.moveToFirst(); 
    int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
    return cursor.getString(index); 
} 

Получение ошибки по указанной строке с комментариями. Если я получаю битмап-путь, то я могу передать это в строке ниже, я думаю ... исправьте меня, если я ошибаюсь. И надеюсь, что вы поймете проблему, о которой я упоминал в своем коде, чтобы вы могли мне помочь.

intent.putExtra(Intent.ACTION_ATTACH_DATA, bitmapPath); 
+0

Aalap, вместо редактирования моего ответа отредактируйте ваше сообщение с последним кодом и выдайте то, что вы получаете –

+0

Я обновил свой пост здесь, и ошибка указана в указанной строке. Пожалуйста, помогите мне решить это. –

ответ

4

Здесь:

intent.putExtra(Intent.EXTRA_STREAM, bitmap); 

линия вызывают проблемы, потому что bitmap размера очень большой, как допустимого размера буфера Связующее транзакции.

Смотрите здесь:

TransactionTooLargeException:

Буфер транзакции Binder имеет ограниченный фиксированный размер, в настоящее время 1Мб, , который является общим для всех сделок, в ходе этого процесса. Следовательно, это исключение может быть вызвано, если в процессе совершения большого количества транзакций , даже если большинство отдельных транзакций имеют умеренный размер.

Таким образом, чтобы решить эту проблему вместо передачи растрового изображения с помощью Intent.putExtra, используйте URL изображения, путь к файлу, URI, рисует идентификатор, ... для передачи данных минимального размера.

Смежные вопросы