首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将QR创建的文件保存并共享到库

将QR创建的文件保存并共享到库
EN

Stack Overflow用户
提问于 2020-10-06 18:57:31
回答 1查看 36关注 0票数 0

我正在开发Android应用程序,其中我使用QR生成库创建了一个二维码。我已经实现了二维码的生成,通过将预览活动中的数据发送到我生成并显示二维码的主活动中。

该问题发生在将二维码保存到图库并共享相同二维码的过程中。

我已经实现了共享意图,但它指出意图不能共享空文件。

当我尝试保存文件时,同样的问题也出现了。

基本上,带有二维码的文件总是空的。

下面是我的分享和QR生成代码:

代码语言:javascript
复制
    class QRGenerationAll : AppCompatActivity() {

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

        val byteArray = intent.getByteArrayExtra("logoimage")
        val bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)
        img_logoimage.setImageBitmap(bmp)

        val valuecatchedvalues: String = intent.getStringExtra("sendedvalues")
        tv_textforqr.setText(valuecatchedvalues)

        val tv_textforqr: String = intent.getStringExtra("logotext")
        tv_textforlogoname.setText(tv_textforqr)


        try {
            //setting size of qr code
            val manager = getSystemService(WINDOW_SERVICE) as WindowManager
            val display = manager.defaultDisplay
            val point = Point()
            display.getSize(point)
            val width = point.x
            val height = point.y
            val smallestDimension = if (width < height) width else height
            // val qrInput = findViewById(R.id.qrInput) as EditText

            //setting parameters for qr code
            val charset = "UTF-8" // or "ISO-8859-1"
            val hintMap: MutableMap<EncodeHintType, ErrorCorrectionLevel> = HashMap()
            hintMap[EncodeHintType.ERROR_CORRECTION] = ErrorCorrectionLevel.L

            if (valuecatchedvalues!=null) {

                createQRCodeText(
                    valuecatchedvalues,
                    charset,
                    hintMap,
                    smallestDimension,
                    smallestDimension
                ) //MAIN METHOD FOR QR GENERATE
            }
        } catch (ex: Exception) {
            Log.e("QrGenerate", ex.message)
        }

        buttonshare.setOnClickListener(View.OnClickListener {
            val sharingIntent = Intent(Intent.ACTION_SEND)
            sharingIntent.type = "text/plain"
            sharingIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject Here")
            sharingIntent.putExtra(Intent.EXTRA_TEXT, bmp)
            startActivity(
                Intent.createChooser(
                    sharingIntent,
                    resources.getString(R.string.app_name)
                )
            )
        })


    }

    private fun createQRCodeText(
        valueqrTextData: String,
        charset: String,
        hintMap: MutableMap<EncodeHintType, ErrorCorrectionLevel>,
        smallestDimension: Int,
        smallestDimension1: Int
    ) {

        try {
            //generating qr code in bitmatrix type
            val matrix = MultiFormatWriter().encode(
                String(
                    valueqrTextData.toByteArray(charset(charset)), kotlin.text.charset(charset)
                ), BarcodeFormat.QR_CODE, smallestDimension, smallestDimension1, hintMap
            )
            //converting bitmatrix to bitmap
            val width = matrix.width
            val height = matrix.height
            val pixels = IntArray(width * height)
            // All are 0, or black, by default
            for (y in 0 until height) {
                val offset = y * width
                for (x in 0 until width) {
                    pixels[offset + x] = if (matrix[x, y]) Color.BLACK else Color.WHITE
                }
            }
            val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
            bitmap.setPixels(pixels, 0, width, 0, 0, width, height)
            //setting bitmap to image view
            val myImage = findViewById(R.id.imageView1) as ImageView
            myImage.setImageBitmap(bitmap)
        } catch (er: java.lang.Exception) {
            Log.e("QrGenerate", er.message)
        }

    }
}

下面的代码片段与从之前的活动中提取文本并在接收活动中生成QR相关。

代码语言:javascript
复制
    val byteArray = intent.getByteArrayExtra("logoimage")
    val bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.size)
    img_logoimage.setImageBitmap(bmp)

    val valuecatchedvalues: String = intent.getStringExtra("sendedvalues")
    tv_textforqr.setText(valuecatchedvalues)

    val tv_textforqr: String = intent.getStringExtra("logotext")
    tv_textforlogoname.setText(tv_textforqr)

这是我在这里面临的唯一问题。我已经生成了QR图像,但当我尝试分享和保存它时,这对我来说似乎是不可能的。

下面是分享意向之后的消息

我在此链接中搜索了guidance Link 1

EN

回答 1

Stack Overflow用户

发布于 2020-10-06 19:33:07

您为EXTRA_TEXT键传递了错误的参数值。您应该使用valuecatchedvalues而不是bmp

代码语言:javascript
复制
sharingIntent.putExtra(Intent.EXTRA_TEXT, valuecatchedvalues)

为什么?

因为这是您创建的二维码的值,所以您的二维码from;

  • bmp的类型为
  1. 。提取EXTRA_TEXT密钥的值时无法处理Bitmap,因为应为String
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64224397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档