Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将QR创建的文件保存并共享到库_Android_Kotlin_Android Intent_Qr Code - Fatal编程技术网

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

Android 将QR创建的文件保存并共享到库,android,kotlin,android-intent,qr-code,Android,Kotlin,Android Intent,Qr Code,我正在开发Android应用程序,我正在使用QR生成库创建一个QR码。我通过将预览活动中的数据发送到我生成并显示二维码的主要活动,实现了二维码的生成 问题发生在将二维码保存到图库并共享同一二维码的过程中 我已经实现了共享意图,但它说意图不能共享空文件 当我试图保存文件时,也会出现同样的问题 基本上,带有二维码的文件总是空的 以下是我的共享和QR生成代码: class QRGenerationAll : AppCompatActivity() { override fun onC

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

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

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

当我试图保存文件时,也会出现同样的问题

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

以下是我的共享和QR生成代码:

    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图像生成,但当我试图分享和保存它似乎不可能为我

以下是共享意图之后的消息


我已搜索此链接以获取指导

您为
额外文本
键传递了错误的参数值。您应该使用
valuecatchedvalues
,而不是
bmp

sharingIntent.putExtra(Intent.EXTRA_TEXT, valuecatchedvalues)
为什么?

  • 因为这是您创建二维码的价值所在
  • bmp
    属于
    Bitmap
    类型<提取
    EXTRA_TEXT
    键的值时,无法处理code>Bitmap,因为需要
    String

  • 请不要发布两个问题。或使用post代码将数据保存到文件中。或尝试共享文件的邮政编码。我希望共享通过传递值生成的QR,但在这种情况下,它传递的是创建QR的文本
    sharingIntent.putExtra(Intent.EXTRA_TEXT, valuecatchedvalues)