Commit 093cb506 authored by wanglei's avatar wanglei

...

parent c697848a
......@@ -14,7 +14,7 @@ import com.base.scanqr.utils.BitmapUtils.saveBitmapToFile
import com.base.scanqr.utils.ClipboardUtils.copyText
import com.base.scanqr.utils.IntentUtils.intentShareImage
import com.base.scanqr.utils.LogEx
import com.base.scanqr.utils.QRCodeGenerator.generateQRCode
import com.base.scanqr.utils.QRCodeUtils.generateQRCode
import com.base.scanqr.utils.SpJsonUtils
import com.base.scanqr.utils.ToastUtils.toast
import com.google.gson.Gson
......
package com.base.scanqr.ui.main
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.hardware.camera2.CameraMetadata.FLASH_MODE_OFF
import android.view.View
......@@ -10,9 +11,12 @@ import com.base.scanqr.R
import com.base.scanqr.base.BaseFragment
import com.base.scanqr.databinding.FragmentScanBinding
import com.base.scanqr.qr.QRImageAnalyzer
import com.base.scanqr.ui.wifi.WifiCodeActivity
import com.base.scanqr.utils.IntentUtils.intentSafPickImage
import com.base.scanqr.utils.LogEx
import com.base.scanqr.utils.PermissionUtils.checkCameraPermission
import com.base.scanqr.utils.QRCodeUtils
import com.google.gson.Gson
import com.gyf.immersionbar.ktx.immersionBar
import java.util.concurrent.atomic.AtomicBoolean
......@@ -45,6 +49,9 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
binding.flFlash.visibility = View.GONE
}
val qrImageAnalyzer = QRImageAnalyzer()
qrImageAnalyzer.parseAction = { qrCodeValue, valueType ->
handleScan(qrCodeValue, valueType)
}
val activity = requireActivity() as MainActivity?
activity ?: return
activity.cameraUtils?.startBind(binding.previewView, qrImageAnalyzer)
......@@ -80,6 +87,26 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
cameraInit.set(true)
}
private var scanJump = AtomicBoolean(false)
/**
* 处理扫描结果
*/
private fun handleScan(qrCodeValue: String, valueType: Int) {
LogEx.logDebug(TAG, "qrCodeValue=$qrCodeValue valueType=$valueType")
val activity = requireActivity() as MainActivity?
activity ?: return
if (QRCodeUtils.isWifiQR(qrCodeValue)) {
if (scanJump.get()) return
scanJump.set(true)
activity.startActivity(Intent(activity, WifiCodeActivity::class.java).apply {
val bean = QRCodeUtils.createWifiBean(qrCodeValue)
putExtra("data", Gson().toJson(bean))
})
return
}
}
override fun onPause() {
super.onPause()
val activity = requireActivity() as MainActivity?
......
......@@ -5,7 +5,6 @@ import androidx.activity.addCallback
import androidx.core.view.updatePadding
import com.base.scanqr.R
import com.base.scanqr.base.BaseActivity
import com.base.scanqr.bean.EmailUIBean
import com.base.scanqr.bean.FunctionUIBean
import com.base.scanqr.bean.ScanBean
import com.base.scanqr.bean.TextUIBean
......@@ -16,11 +15,10 @@ import com.base.scanqr.utils.BitmapUtils.saveBitmapToFile
import com.base.scanqr.utils.ClipboardUtils.copyText
import com.base.scanqr.utils.IntentUtils.intentShareText
import com.base.scanqr.utils.LogEx
import com.base.scanqr.utils.QRCodeGenerator.generateQRCode
import com.base.scanqr.utils.QRCodeUtils.generateQRCode
import com.base.scanqr.utils.SpJsonUtils
import com.base.scanqr.utils.ToastUtils.toast
import java.io.File
import java.io.ObjectInput
class TextCodeActivity : BaseActivity<ActivityTextCodeBinding>(ActivityTextCodeBinding::inflate) {
......
......@@ -14,7 +14,7 @@ import com.base.scanqr.utils.BitmapUtils.saveBitmapToFile
import com.base.scanqr.utils.ClipboardUtils.copyText
import com.base.scanqr.utils.IntentUtils.intentShareImage
import com.base.scanqr.utils.LogEx
import com.base.scanqr.utils.QRCodeGenerator.generateQRCode
import com.base.scanqr.utils.QRCodeUtils.generateQRCode
import com.base.scanqr.utils.SpJsonUtils
import com.base.scanqr.utils.ToastUtils.toast
import com.google.gson.Gson
......@@ -32,10 +32,13 @@ class WifiCodeActivity : BaseActivity<ActivityWifiCodeBinding>(ActivityWifiCodeB
val data = intent.extras?.getString("data")
LogEx.logDebug(TAG, "data=$data")
data?.let {
wifiBean = Gson().fromJson(data, WifiUIBean::class.java)
}
val content = StringBuilder()
content.append("WIF:T:")
content.append("WIFI:")
content.append("T:")
if (wifiBean.securityId == 0) {
content.append("WPA/WPA2").append(";")
binding.tvSecurity.text = "WPA/WPA2"
......
......@@ -2,14 +2,14 @@ package com.base.scanqr.utils
import android.graphics.Bitmap
import android.graphics.Color
import com.base.scanqr.bean.WifiUIBean
import com.google.zxing.BarcodeFormat
import com.google.zxing.EncodeHintType
import com.google.zxing.WriterException
import com.google.zxing.common.BitMatrix
import com.google.zxing.qrcode.QRCodeWriter
import java.util.EnumMap
object QRCodeGenerator {
object QRCodeUtils {
// fun generateQRCode(content: String, width: Int, height: Int): Bitmap? {
// val writer = QRCodeWriter()
......@@ -60,4 +60,55 @@ object QRCodeGenerator {
}
return null
}
fun isWifiQR(qrCodeValue: String): Boolean {
val flag = qrCodeValue.startsWith("WIFI:")
if (flag) {
return true
}
return false
}
fun createWifiBean(qrCodeValue: String): WifiUIBean {
val splitList = qrCodeValue.split(";")
val wifiUIBean = WifiUIBean()
wifiUIBean.isCreateOrScan = false
wifiUIBean.createTime = System.currentTimeMillis()
val ssidKV = splitList.find { it.startsWith("S:") } ?: ""
wifiUIBean.ssid = getPairKeyValue(ssidKV).second
val passWordKV = splitList.find { it.startsWith("P:") } ?: ""
wifiUIBean.password = getPairKeyValue(passWordKV).second
val hiddenKV = splitList.find { it.startsWith("H:") } ?: ""
wifiUIBean.hidden = getPairKeyValue(hiddenKV).second.toBoolean()
val securityKy = splitList.find { it.startsWith("T") }
if (securityKy.equals("WPA/WPA2")) {
wifiUIBean.securityId = 0
}
if (securityKy.equals("WEP")) {
wifiUIBean.securityId = 1
}
if (securityKy.equals("")) {
wifiUIBean.securityId = 0
}
return wifiUIBean
}
fun getPairKeyValue(keyValue: String): Pair<String, String> {
val split = keyValue.split(":")
var key = ""
kotlin.runCatching {
key = split[0]
}
var value: String = ""
kotlin.runCatching {
value = split[1]
}
return Pair(key, value)
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment