2017-02-16 42 views
-1

Я пытаюсь реализовать параметр share для png-изображений в своем приложении, но у меня возникает TransactionTooLargeException. Что я сделал: я добавил код для сжатия моего растрового изображения, но я все еще получаю исключение. Есть ли что-то, что я делаю неправильно?Share Option for PNG

public void sharePicture(MenuItem shareItem) { 
    MenuItemCompat.getActionProvider(shareItem); 
    Drawable drawable = itemImage.getDrawable(); 

    Bitmap picture = ((BitmapDrawable) drawable).getBitmap(); 
    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    picture.compress(Bitmap.CompressFormat.PNG, 100, stream); 

    final Intent shareIntent = new Intent(Intent.ACTION_SEND); 
    shareIntent.setType("image/png"); 
    shareIntent.putExtra(Intent.EXTRA_STREAM, picture); 
    startActivity(Intent.createChooser(shareIntent, "Share image using")); 
} 
+0

* Я добавил код для сжатия моего растрового изображения * ... нет, вы не так, как вы не можете ... вы сохраняете/сжимаете растровое изображение к потоку, который вы никогда не используете снова ... и растровое изображение всегда будет взять 'width * heigth * bytes_per_pixel' память – Selvin

ответ

0

Цитирование the documentation, EXTRA_STREAM является:

Содержания: URI, удерживая поток данных, связанных с Намерением, используемых с ACTION_SEND, чтобы предоставить данные об их отправке.

Вы не ставите Bitmap в EXTRA_STREAM для запроса image/pngACTION_SEND. Вы помещаете Uri, указывая на PNG на EXTRA_STREAM. В идеале вы делаете это через FileProvider, хотя если ваш targetSdkVersion ниже 24, вы можете уйти с Uri.fromFile().