Commit 093cb506 authored by wanglei's avatar wanglei

...

parent c697848a
...@@ -14,7 +14,7 @@ import com.base.scanqr.utils.BitmapUtils.saveBitmapToFile ...@@ -14,7 +14,7 @@ import com.base.scanqr.utils.BitmapUtils.saveBitmapToFile
import com.base.scanqr.utils.ClipboardUtils.copyText import com.base.scanqr.utils.ClipboardUtils.copyText
import com.base.scanqr.utils.IntentUtils.intentShareImage import com.base.scanqr.utils.IntentUtils.intentShareImage
import com.base.scanqr.utils.LogEx 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.SpJsonUtils
import com.base.scanqr.utils.ToastUtils.toast import com.base.scanqr.utils.ToastUtils.toast
import com.google.gson.Gson import com.google.gson.Gson
......
package com.base.scanqr.ui.main package com.base.scanqr.ui.main
import android.Manifest import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.hardware.camera2.CameraMetadata.FLASH_MODE_OFF import android.hardware.camera2.CameraMetadata.FLASH_MODE_OFF
import android.view.View import android.view.View
...@@ -10,9 +11,12 @@ import com.base.scanqr.R ...@@ -10,9 +11,12 @@ import com.base.scanqr.R
import com.base.scanqr.base.BaseFragment import com.base.scanqr.base.BaseFragment
import com.base.scanqr.databinding.FragmentScanBinding import com.base.scanqr.databinding.FragmentScanBinding
import com.base.scanqr.qr.QRImageAnalyzer 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.IntentUtils.intentSafPickImage
import com.base.scanqr.utils.LogEx import com.base.scanqr.utils.LogEx
import com.base.scanqr.utils.PermissionUtils.checkCameraPermission 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 com.gyf.immersionbar.ktx.immersionBar
import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicBoolean
...@@ -45,6 +49,9 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl ...@@ -45,6 +49,9 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
binding.flFlash.visibility = View.GONE binding.flFlash.visibility = View.GONE
} }
val qrImageAnalyzer = QRImageAnalyzer() val qrImageAnalyzer = QRImageAnalyzer()
qrImageAnalyzer.parseAction = { qrCodeValue, valueType ->
handleScan(qrCodeValue, valueType)
}
val activity = requireActivity() as MainActivity? val activity = requireActivity() as MainActivity?
activity ?: return activity ?: return
activity.cameraUtils?.startBind(binding.previewView, qrImageAnalyzer) activity.cameraUtils?.startBind(binding.previewView, qrImageAnalyzer)
...@@ -80,6 +87,26 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl ...@@ -80,6 +87,26 @@ class ScanFragment : BaseFragment<FragmentScanBinding>(FragmentScanBinding::infl
cameraInit.set(true) 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() { override fun onPause() {
super.onPause() super.onPause()
val activity = requireActivity() as MainActivity? val activity = requireActivity() as MainActivity?
......
...@@ -5,7 +5,6 @@ import androidx.activity.addCallback ...@@ -5,7 +5,6 @@ import androidx.activity.addCallback
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import com.base.scanqr.R import com.base.scanqr.R
import com.base.scanqr.base.BaseActivity import com.base.scanqr.base.BaseActivity
import com.base.scanqr.bean.EmailUIBean
import com.base.scanqr.bean.FunctionUIBean import com.base.scanqr.bean.FunctionUIBean
import com.base.scanqr.bean.ScanBean import com.base.scanqr.bean.ScanBean
import com.base.scanqr.bean.TextUIBean import com.base.scanqr.bean.TextUIBean
...@@ -16,11 +15,10 @@ import com.base.scanqr.utils.BitmapUtils.saveBitmapToFile ...@@ -16,11 +15,10 @@ import com.base.scanqr.utils.BitmapUtils.saveBitmapToFile
import com.base.scanqr.utils.ClipboardUtils.copyText import com.base.scanqr.utils.ClipboardUtils.copyText
import com.base.scanqr.utils.IntentUtils.intentShareText import com.base.scanqr.utils.IntentUtils.intentShareText
import com.base.scanqr.utils.LogEx 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.SpJsonUtils
import com.base.scanqr.utils.ToastUtils.toast import com.base.scanqr.utils.ToastUtils.toast
import java.io.File import java.io.File
import java.io.ObjectInput
class TextCodeActivity : BaseActivity<ActivityTextCodeBinding>(ActivityTextCodeBinding::inflate) { class TextCodeActivity : BaseActivity<ActivityTextCodeBinding>(ActivityTextCodeBinding::inflate) {
......
...@@ -14,7 +14,7 @@ import com.base.scanqr.utils.BitmapUtils.saveBitmapToFile ...@@ -14,7 +14,7 @@ import com.base.scanqr.utils.BitmapUtils.saveBitmapToFile
import com.base.scanqr.utils.ClipboardUtils.copyText import com.base.scanqr.utils.ClipboardUtils.copyText
import com.base.scanqr.utils.IntentUtils.intentShareImage import com.base.scanqr.utils.IntentUtils.intentShareImage
import com.base.scanqr.utils.LogEx 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.SpJsonUtils
import com.base.scanqr.utils.ToastUtils.toast import com.base.scanqr.utils.ToastUtils.toast
import com.google.gson.Gson import com.google.gson.Gson
...@@ -32,10 +32,13 @@ class WifiCodeActivity : BaseActivity<ActivityWifiCodeBinding>(ActivityWifiCodeB ...@@ -32,10 +32,13 @@ class WifiCodeActivity : BaseActivity<ActivityWifiCodeBinding>(ActivityWifiCodeB
val data = intent.extras?.getString("data") val data = intent.extras?.getString("data")
LogEx.logDebug(TAG, "data=$data") LogEx.logDebug(TAG, "data=$data")
wifiBean = Gson().fromJson(data, WifiUIBean::class.java) data?.let {
wifiBean = Gson().fromJson(data, WifiUIBean::class.java)
}
val content = StringBuilder() val content = StringBuilder()
content.append("WIF:T:") content.append("WIFI:")
content.append("T:")
if (wifiBean.securityId == 0) { if (wifiBean.securityId == 0) {
content.append("WPA/WPA2").append(";") content.append("WPA/WPA2").append(";")
binding.tvSecurity.text = "WPA/WPA2" binding.tvSecurity.text = "WPA/WPA2"
......
...@@ -2,14 +2,14 @@ package com.base.scanqr.utils ...@@ -2,14 +2,14 @@ package com.base.scanqr.utils
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.Color import android.graphics.Color
import com.base.scanqr.bean.WifiUIBean
import com.google.zxing.BarcodeFormat import com.google.zxing.BarcodeFormat
import com.google.zxing.EncodeHintType import com.google.zxing.EncodeHintType
import com.google.zxing.WriterException import com.google.zxing.WriterException
import com.google.zxing.common.BitMatrix import com.google.zxing.common.BitMatrix
import com.google.zxing.qrcode.QRCodeWriter import com.google.zxing.qrcode.QRCodeWriter
import java.util.EnumMap
object QRCodeGenerator { object QRCodeUtils {
// fun generateQRCode(content: String, width: Int, height: Int): Bitmap? { // fun generateQRCode(content: String, width: Int, height: Int): Bitmap? {
// val writer = QRCodeWriter() // val writer = QRCodeWriter()
...@@ -60,4 +60,55 @@ object QRCodeGenerator { ...@@ -60,4 +60,55 @@ object QRCodeGenerator {
} }
return null 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