Android 将QR创建的文件保存并共享到库
我正在开发Android应用程序,我正在使用QR生成库创建一个QR码。我通过将预览活动中的数据发送到我生成并显示二维码的主要活动,实现了二维码的生成 问题发生在将二维码保存到图库并共享同一二维码的过程中 我已经实现了共享意图,但它说意图不能共享空文件 当我试图保存文件时,也会出现同样的问题 基本上,带有二维码的文件总是空的 以下是我的共享和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
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)