lmw
2024-06-17 f571288a24fcf10143dcc8015ffbbf38dbc0c614
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
package com.dollearn.student.ui.home
 
import android.Manifest
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.util.Log
import androidx.core.content.ContextCompat
import androidx.core.content.ContextCompat.startActivity
import androidx.core.os.bundleOf
import cn.sinata.xldutils.activity.BaseActivity
import cn.sinata.xldutils.utils.SPUtils
import cn.sinata.xldutils.utils.myToast
import com.google.gson.Gson
import com.google.zxing.Result
import com.dollearn.student.R
import com.dollearn.student.WeparkApplication
import com.dollearn.student.dialog.TipDialog
import com.dollearn.student.network.HttpManager
import com.dollearn.student.network.entity.ScanResultBean
import com.dollearn.student.network.request
import com.dollearn.student.ui.TransparentStatusBarActivity
import com.dollearn.student.ui.course.CourseDetailActivity
import com.dollearn.student.ui.game.GameActivity
import com.dollearn.student.utils.Const
import com.tbruyelle.rxpermissions2.RxPermissions
import com.zxing.scanner.OnScannerCompletionListener
import com.zxing.scanner.common.Scanner
import kotlinx.android.synthetic.main.scanner_activity.*
import org.jetbrains.anko.startActivity
import org.jetbrains.anko.toast
 
class ScannerActivity : TransparentStatusBarActivity(), OnScannerCompletionListener {
    companion object {
        @SuppressLint("CheckResult")
        fun start(context: Activity) {
            val rxPermissions = RxPermissions(context)
            val cameraGranted = rxPermissions.isGranted(Manifest.permission.CAMERA)
            if (SPUtils.instance().getBoolean(Const.Permission.CAMERA_REFUSE)&& !cameraGranted){
                context.myToast("缺少相机权限")
                return
            }
            if (cameraGranted)
                context.startActivity<ScannerActivity>()
            else{
                val tipDialog = TipDialog()
                tipDialog.arguments = bundleOf("msg" to "为了扫描二维码,我们需要获取摄像头使用权限","ok" to "去授权","cancel" to "不需要")
                tipDialog.setCallback(object :TipDialog.OnClickCallback{
                    override fun onOk() {
                        RxPermissions(context).request(Manifest.permission.CAMERA)
                            .subscribe {
                                if (it) {
                                    context.startActivity<ScannerActivity>()
                                } else{
                                    context.myToast("没有相机权限")
                                    SPUtils.instance().put(Const.Permission.CAMERA_REFUSE,true).apply()
                                }
                            }
                    }
 
                    override fun onCancel() {
                        SPUtils.instance().put(Const.Permission.CAMERA_REFUSE,true).apply()
                    }
                })
                tipDialog.show((context as BaseActivity).supportFragmentManager,"scan")
            }
 
        }
    }
 
    private val isWorldCup by lazy { intent.getBooleanExtra("isWorldCup",false) }
 
    override fun setContentView(): Int {
        return R.layout.scanner_activity
    }
 
    override fun initClick() {
    }
 
    override fun initView() {
        scanner_view.setOnScannerCompletionListener(this)
        scanner_view.setDrawText(
            "将账号二维码放入框内,即可自动识别", true,
            Scanner.dp2px(this, 14f)
        )
        scanner_view.setDrawTextColor(ContextCompat.getColor(this, R.color.white))
        scanner_view.setDrawTextSize(14)
    }
 
    override fun onResume() {
        scanner_view.onResume()
        super.onResume()
    }
 
    override fun onPause() {
        scanner_view.onPause()
        super.onPause()
    }
 
    override fun onScannerCompletion(rawResult: Result, barcode: Bitmap?) {
        Log.e(Const.Tag,"扫码结果:"+rawResult.text)
        if (isWorldCup){
            val data = Intent()
            data.putExtra("result",rawResult.text)
            setResult(RESULT_OK,data)
            finish()
        }else try {
            val bean = Gson().fromJson<ScanResultBean>(rawResult.text, ScanResultBean::class.java)
            when(bean.scan_type){
                1000->{ //游戏
                    if (bean.space_id ==0 ||bean.sutu_id == 0)
                        myToast("无法识别二维码")
                    else{
                        startActivity<GameActivity>("siteId" to bean.space_id,"deviceId" to bean.sutu_id)
                        finish()
                    }
                }
                1001->{
                    startActivity<CourseDetailActivity>("id" to bean.id)
                    finish()
                }
                1002->{
                    startActivity<PlaceDetailActivity>("id" to bean.id)
                    finish()
                }
                else->{
                    myToast("无法识别二维码")
                }
            }
 
        }catch (e:Exception){
            myToast("无法识别二维码2")
        }
    }
}