lmw
2023-05-12 f67802a41f9e01444d1115f34ecc6e1beb05fc3b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
package com.fuban.user.ui.trip
 
import android.Manifest
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.provider.MediaStore
import android.util.Log
import android.view.View
import cn.bingoogolapple.qrcode.core.BarcodeType
import cn.bingoogolapple.qrcode.core.QRCodeView
import cn.sinata.xldutils.activity.BaseActivity
import cn.sinata.xldutils.utils.getUrlPath
import cn.sinata.xldutils.utils.myToast
import com.github.zackratos.ultimatebar.UltimateBar
import com.fuban.user.R
import com.fuban.user.network.HttpManager
import com.fuban.user.network.request
import com.tbruyelle.rxpermissions2.RxPermissions
import kotlinx.android.synthetic.main.activity_sacn.*
import org.jetbrains.anko.startActivityForResult
import org.jetbrains.anko.textColorResource
import org.jetbrains.anko.toast
import java.util.*
 
class ScanActivity : BaseActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sacn)
        UltimateBar.with(this)
            .create().immersionBar() //沉浸状态栏
        titleBar.titleView.text = "扫一扫"
        titleBar.titleView.textColorResource = R.color.white
        titleBar.leftView.setCompoundDrawablesWithIntrinsicBounds(R.mipmap.back_white,0,0,0)
        titleBar.addRightButton("相册",onClickListener = View.OnClickListener {
            RxPermissions(this).request(
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.READ_EXTERNAL_STORAGE).subscribe {
                if (it) {
                    val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)// 调用android的图库
                    intent.type = "image/*"
                    startActivityForResult(intent, 1)
                }else{
                    toast("没有访问设备存储权限")
                }
            }
        })
        titleBar.getRightButton(0)?.textColorResource = R.color.white
        initQRCode()
    }
 
    private fun initQRCode() {
        zxingview.startCamera()
        zxingview.startSpotAndShowRect()
        zxingview.changeToScanQRCodeStyle() // 切换成扫描二维码样式
        zxingview.setType(BarcodeType.TWO_DIMENSION, null) // 只识别二维条码
        zxingview.setDelegate(object : QRCodeView.Delegate{
            override fun onScanQRCodeSuccess(result: String?) {
                zxingview.stopCamera()
                if (result.isNullOrEmpty()){
                    myToast("识别失败,请重新扫描")
                    initQRCode()
                }else{
                    Log.e("二维码扫描结果",result)
                    if(result.startsWith("driverId:")){
                        try {
                            val id = result.substring(9, result.length).toInt()
                            showDialog()
                            HttpManager.queryDriverInfo(id).request(this@ScanActivity,false,{_,data->
                                data?.let {
                                    startActivityForResult<ChooseOrderTypeActivity>(2,"driver" to it,"startName" to intent.getStringExtra("startName"),
                                        "startLat" to intent.getDoubleExtra("startLat",0.0), "startLon" to intent.getDoubleExtra("startLon",0.0))
                                    finish()
                                }
                            },{_,_->
                                myToast("司机信息查询失败,请重试")
                                initQRCode()
                            })
                        }catch (e:Exception){
                            myToast("仅支持福伴出行司机二维码")
                            initQRCode()
                        }
                    }else{
                        myToast("仅支持福伴出行司机二维码")
                        initQRCode()
                    }
                }
            }
 
            override fun onCameraAmbientBrightnessChanged(isDark: Boolean) {
                var tipText = zxingview.scanBoxView.tipText
                val ambientBrightnessTip = "\n当前环境过暗"
                if (isDark) {
                    if (!tipText.contains(ambientBrightnessTip)) {
                        zxingview.scanBoxView.tipText = tipText + ambientBrightnessTip
                    }
                } else {
                    if (tipText.contains(ambientBrightnessTip)) {
                        tipText = tipText.substring(0, tipText.indexOf(ambientBrightnessTip))
                        zxingview.scanBoxView.tipText = tipText
                    }
                }
            }
 
            override fun onScanQRCodeOpenCameraError() {
                myToast("请在应用权限页面开启相机权限")
                finish()
            }
        })
    }
 
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == Activity.RESULT_OK&&data!=null&&requestCode == 1){
            val uri = data.data
            if (uri != null) {
                val path = getUrlPath(uri)
                if (path != null) {
                    val typeIndex = path.lastIndexOf(".")
                    if (typeIndex != -1) {
                        val fileType = path.substring(typeIndex + 1).toLowerCase(Locale.CHINA)
                        //某些设备选择图片是可以选择一些非图片的文件。然后发送出去或出错。这里简单的通过匹配后缀名来判断是否是图片文件
                        //如果是图片文件则发送。反之给出提示
                        if (fileType == "jpg" || fileType == "gif"
                            || fileType == "png" || fileType == "jpeg"
                            || fileType == "bmp" || fileType == "wbmp"
                            || fileType == "ico" || fileType == "jpe") {
                            zxingview.decodeQRCode(path)
                        } else {
                            toast("无法识别的图片类型!")
                        }
                    } else {
                        toast("无法识别的图片类型!")
                    }
                } else {
                    toast("无法识别的图片类型或路径!")
                }
            } else {
                toast("无法识别的图片类型!")
            }
        }else if (requestCode == 2&&resultCode == Activity.RESULT_OK)
            finish()
        else
            initQRCode()
    }
 
    override fun onStop() {
        super.onStop()
        zxingview.stopCamera()
    }
 
    override fun onDestroy() {
        super.onDestroy()
        zxingview.onDestroy()
    }
}