0

I had a simple android app. But everytime i click "Share" Button, it crashes with this error log:

E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 5817316)
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.websitebeaver.documentscanner.demo, PID: 8827
    java.lang.RuntimeException: Failure from system
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1711)
        at android.app.Activity.startActivityForResult(Activity.java:5192)
        at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:597)
        at android.app.Activity.startActivityForResult(Activity.java:5150)
        at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:583)
        at android.app.Activity.startActivity(Activity.java:5521)
        at android.app.Activity.startActivity(Activity.java:5489)
        at com.websitebeaver.documentscanner.demo.MainActivity.onCreate$lambda-0(MainActivity.kt:73)
        at com.websitebeaver.documentscanner.demo.MainActivity.$r8$lambda$b_e-1CZpbkFu7HYhPCCRZslWl60(Unknown Source:0)
        at com.websitebeaver.documentscanner.demo.MainActivity$$ExternalSyntheticLambda0.onClick(Unknown Source:2)
        at android.view.View.performClick(View.java:7125)
        at android.view.View.performClickInternal(View.java:7102)
        at android.view.View.access$3500(View.java:801)
        at android.view.View$PerformClick.run(View.java:27336)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     Caused by: android.os.TransactionTooLargeException: data parcel size 5817316 bytes
        at android.os.BinderProxy.transactNative(Native Method)
        at android.os.BinderProxy.transact(BinderProxy.java:510)
        at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3847)
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1705)
        at android.app.Activity.startActivityForResult(Activity.java:5192) 
        at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:597) 
        at android.app.Activity.startActivityForResult(Activity.java:5150) 
        at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:583) 
        at android.app.Activity.startActivity(Activity.java:5521) 
        at android.app.Activity.startActivity(Activity.java:5489) 
        at com.websitebeaver.documentscanner.demo.MainActivity.onCreate$lambda-0(MainActivity.kt:73) 
        at com.websitebeaver.documentscanner.demo.MainActivity.$r8$lambda$b_e-1CZpbkFu7HYhPCCRZslWl60(Unknown Source:0) 
        at com.websitebeaver.documentscanner.demo.MainActivity$$ExternalSyntheticLambda0.onClick(Unknown Source:2) 
        at android.view.View.performClick(View.java:7125) 
        at android.view.View.performClickInternal(View.java:7102) 
        at android.view.View.access$3500(View.java:801) 
        at android.view.View$PerformClick.run(View.java:27336) 
        at android.os.Handler.handleCallback(Handler.java:883) 
        at android.os.Handler.dispatchMessage(Handler.java:100) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
I/Process: Sending signal. PID: 8827 SIG: 9

Thats the code:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // cropped image
        croppedImageView = findViewById(R.id.cropped_image_view)
        //val imageUrl = croppedImageView.getTag(R.id.cropped_image_view)?.toString()

        shareBtn = findViewById(R.id.shareBtn)
        shareBtn.setOnClickListener {
            val intent= Intent(Intent.ACTION_SEND)
            //intent.putExtra(Intent.EXTRA_TEXT,"Hey Check out this Great app:")
            //intent.type="text/plain"
            intent.putExtra(Intent.EXTRA_STREAM, imageViewToPdf(croppedImageView))
            intent.type = "application/pdf"
            startActivity(Intent.createChooser(intent, null))
        }

        // start document scan
        documentScanner.startScan()
    }

    fun imageViewToPdf(imageView: ImageView): String? {
        val bitmap = Bitmap.createBitmap(imageView.width, imageView.height, Bitmap.Config.ARGB_8888)
        val canvas = Canvas(bitmap)
        imageView.draw(canvas)
        val document = PdfDocument()
        val page = document.startPage(PdfDocument.PageInfo.Builder(bitmap.width, bitmap.height, 1).create())
        page.canvas.drawBitmap(bitmap, 0f, 0f, null)
        document.finishPage(page)
        val outputStream = ByteArrayOutputStream()
        document.writeTo(outputStream)
        document.close()
        val pdfData = outputStream.toByteArray()
        return "data:application/pdf;base64," + android.util.Base64.encodeToString(pdfData, android.util.Base64.DEFAULT)
    }

Any ideas why? I searched for it but didnt find a solution why this error comes... Probably something in imageViewToPDF?

The App takes an image and i want to change it to pdf and than wanna share the PDF uri

jelkaa
  • 15
  • 2
  • Try this once https://stackoverflow.com/a/48875574 – Sandesh Khutal Feb 10 '23 at 09:26
  • @SandeshKhutalSaheb Tried it. But doesnt work. I added that `override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) //Clear the Activity's bundle of the subsidiary fragments' bundles. outState.clear() }` – jelkaa Feb 10 '23 at 09:41
  • Getting the same error again with that code :( – jelkaa Feb 10 '23 at 09:47

1 Answers1

0

Write your PDF to a file and use FileProvider and its getUriForFile() method to get a content Uri to put in EXTRA_STREAM. EXTRA_STREAM takes a content Uri, not a data Uri.

More generally, an Intent needs to be small. Putting an extra on the Intent whose size is a few KB is OK. Tens of KB will be a problem. You are putting on hundreds of KB, which simply will not work.

CommonsWare
  • 986,068
  • 189
  • 2,389
  • 2,491