2017-02-16 8 views
-1

내 앱에서 png 그림에 대한 공유 옵션을 구현하려고하는데 TransactionTooLargeException이 발생했습니다. 내가 한 일은 : 비트 맵을 압축하는 코드를 추가했지만 여전히 예외가 발생합니다. 내가 잘못하고있는 것이 있습니까?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

* 내 비트 맵을 압축하는 코드를 추가했습니다. * ... 아니, 할 수있는 것처럼 ... 비트 맵을 다시 사용하지 않는 스트림에 저장/압축합니다. 항상 비트 맵을 사용합니다. '너비 * heigth * bytes_per_pixel' 메모리를 가져라. – Selvin

답변

0

the documentation 인용 EXTRA_STREAM은 :

함유량 : URI 데이터를 공급 ACTION_SEND 사용할 텐트와 연관된 데이터 스트림을 들고 보내지는.

당신은 image/pngACTION_SEND 요청 EXTRA_STREAMBitmap를 넣지 마십시오. PNG를 가리키는 UriEXTRA_STREAM에 넣습니다. 이상적으로는 FileProvider을 통해 이루어 지지만, targetSdkVersion이 24 세 미만인 경우 Uri.fromFile()으로 당분간 퇴장 할 수 있습니다.