|
@@ -23,26 +23,37 @@
|
|
|
|
|
|
package com.sybotan.android.demo.activities
|
|
|
|
|
|
+import android.annotation.SuppressLint
|
|
|
import android.content.Intent
|
|
|
import android.graphics.Color
|
|
|
import android.graphics.PointF
|
|
|
import android.os.Bundle
|
|
|
+import android.os.Environment
|
|
|
import android.support.v7.widget.GridLayoutManager
|
|
|
import android.support.v7.widget.LinearLayoutManager
|
|
|
import android.util.Log
|
|
|
import android.view.Gravity
|
|
|
+import android.view.MotionEvent
|
|
|
import android.view.View
|
|
|
+import android.webkit.WebSettings
|
|
|
+import android.webkit.WebView
|
|
|
+import android.webkit.WebViewClient
|
|
|
import android.widget.TextView
|
|
|
import android.widget.Toast
|
|
|
import cn.sagacloud.android.cadengine.FloorScene
|
|
|
+import cn.sagacloud.android.cadengine.Lasso
|
|
|
import cn.sagacloud.android.cadengine.Opt
|
|
|
import cn.sagacloud.android.cadengine.items.*
|
|
|
-import cn.sagacloud.android.cadengine.types.PipeLine
|
|
|
-import cn.sagacloud.android.cadengine.types.Point
|
|
|
-import cn.sagacloud.android.cadengine.types.Space
|
|
|
-import cn.sagacloud.android.cadengine.types.TunableSpace
|
|
|
+import cn.sagacloud.android.cadengine.types.*
|
|
|
import cn.sagacloud.cadengine.HttpDownloadMap
|
|
|
+import com.afollestad.materialdialogs.MaterialDialog
|
|
|
+import com.arashivision.sdkcamera.camera.InstaCameraManager
|
|
|
+import com.arashivision.sdkcamera.camera.callback.ICameraChangedCallback
|
|
|
+import com.arashivision.sdkcamera.camera.callback.ICaptureStatusListener
|
|
|
import com.google.gson.Gson
|
|
|
+import com.lzy.okgo.OkGo
|
|
|
+import com.lzy.okgo.callback.FileCallback
|
|
|
+import com.lzy.okgo.model.Response
|
|
|
import com.sybotan.android.demo.R
|
|
|
import com.sybotan.android.demo.activities.poc.DeviceActivity
|
|
|
import com.sybotan.android.demo.activities.poc.RelationActivity
|
|
@@ -50,6 +61,7 @@ import com.sybotan.android.demo.adapter.PipeAdapter
|
|
|
import com.sybotan.android.demo.bean.result.*
|
|
|
import com.sybotan.android.demo.retrofit.BaseViewModelInterface
|
|
|
import com.sybotan.android.demo.tools.DensityUtils
|
|
|
+import com.sybotan.android.demo.tools.NetworkManager
|
|
|
import com.sybotan.android.demo.viewmodel.GraphyVM
|
|
|
import com.sybotan.android.graphy.events.SGraphyViewMoveEvent
|
|
|
import com.zbar.lib.CaptureActivity
|
|
@@ -59,10 +71,15 @@ import org.greenrobot.eventbus.Subscribe
|
|
|
import org.jetbrains.anko.doAsync
|
|
|
import org.jetbrains.anko.textColor
|
|
|
import org.jetbrains.anko.uiThread
|
|
|
+import java.io.*
|
|
|
+import java.text.SimpleDateFormat
|
|
|
+import java.util.*
|
|
|
+import java.util.concurrent.atomic.AtomicInteger
|
|
|
+import kotlin.collections.ArrayList
|
|
|
|
|
|
|
|
|
@Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS")
|
|
|
-class GraphyActivity : BaseActivity() {
|
|
|
+class GraphyActivity : BaseActivity(), ICaptureStatusListener, ICameraChangedCallback {
|
|
|
companion object {
|
|
|
private val TAG = GraphyActivity::class.java.name
|
|
|
|
|
@@ -79,6 +96,8 @@ class GraphyActivity : BaseActivity() {
|
|
|
var isAddBaseMap: Boolean = false
|
|
|
}
|
|
|
|
|
|
+ private lateinit var spacePipeModel: java.util.ArrayList<SpacePipeModel>
|
|
|
+
|
|
|
/** viewModel */
|
|
|
lateinit var graphyVM: GraphyVM
|
|
|
|
|
@@ -130,13 +149,20 @@ class GraphyActivity : BaseActivity() {
|
|
|
EventBus.getDefault().register(this)
|
|
|
/** 初始化数据 */
|
|
|
initData()
|
|
|
-
|
|
|
+ InstaCameraManager.getInstance().registerCameraChangedCallback(this)
|
|
|
graphyView.scene = scene
|
|
|
|
|
|
+ val rect1 = scene.addRectItem(10f, 10f, 400f, 300f)
|
|
|
+ rect1.moveTo(53587.82f, 28717.135f)
|
|
|
+ rect1.zOrder = 1000009f
|
|
|
+
|
|
|
/** 开启异步 */
|
|
|
doAsync {
|
|
|
val downloadGZIPMap = HttpDownloadMap.downloadGZIPMap(floorMap)
|
|
|
- downloadGZIPMap?.let { scene.loadData(it) }
|
|
|
+ downloadGZIPMap?.let {
|
|
|
+ scene.loadData(it)
|
|
|
+ eagleView.scene = scene
|
|
|
+ }
|
|
|
/** 主线程处理ui */
|
|
|
uiThread {
|
|
|
/** 适应屏幕大小 */
|
|
@@ -152,6 +178,7 @@ class GraphyActivity : BaseActivity() {
|
|
|
// scene.addItem(mapItem)
|
|
|
mapItem = BaseMapItem(this@GraphyActivity, null)
|
|
|
}
|
|
|
+ eagleView.fitSceneToView()
|
|
|
|
|
|
Log.e("viewH", graphyView.measuredHeight.toString())
|
|
|
}
|
|
@@ -163,11 +190,72 @@ class GraphyActivity : BaseActivity() {
|
|
|
/** 网络请求回调处理 */
|
|
|
initViewModel()
|
|
|
|
|
|
-
|
|
|
+ initGrid()
|
|
|
return
|
|
|
} // Function onCreate()
|
|
|
|
|
|
/**
|
|
|
+ * 模拟轴网
|
|
|
+ */
|
|
|
+ private fun initGrid() {
|
|
|
+ val grid1 = Grid()
|
|
|
+ val place1 = Place()
|
|
|
+ place1.points = ArrayList<PointF>()
|
|
|
+ val point1 = PointF()
|
|
|
+ point1.x = 53587.82f
|
|
|
+ point1.y = 28717.135f
|
|
|
+ place1.points!!.add(point1)
|
|
|
+ val point2 = PointF()
|
|
|
+ point2.x = 53587.82f
|
|
|
+ point2.y = -36885.92f
|
|
|
+ place1.points!!.add(point2)
|
|
|
+ grid1.location = place1
|
|
|
+ grid1.name = "A"
|
|
|
+
|
|
|
+
|
|
|
+ val grid3 = Grid()
|
|
|
+ val place3 = Place()
|
|
|
+ place3.points = ArrayList<PointF>()
|
|
|
+ val point5 = PointF()
|
|
|
+ point5.x = 44587.82f
|
|
|
+ point5.y = 28717.135f
|
|
|
+ place3.points!!.add(point5)
|
|
|
+ val point6 = PointF()
|
|
|
+ point6.x = 44587.82f
|
|
|
+ point6.y = -36885.92f
|
|
|
+ place3.points!!.add(point6)
|
|
|
+ grid3.location = place3
|
|
|
+ grid3.name = "B"
|
|
|
+
|
|
|
+ val grid2 = Grid()
|
|
|
+ val place2 = Place()
|
|
|
+ place2.points = ArrayList<PointF>()
|
|
|
+ val point3 = PointF()
|
|
|
+ point3.x = -16887.006f
|
|
|
+ point3.y = 7738.7656f
|
|
|
+ place2.points!!.add(point3)
|
|
|
+ val point4 = PointF()
|
|
|
+ point4.x = 152855.56f
|
|
|
+ point4.y = 9129.109f
|
|
|
+ place2.points!!.add(point4)
|
|
|
+ grid2.location = place2
|
|
|
+ grid2.name = "X"
|
|
|
+
|
|
|
+ val gridItem1 = GridItem(grid1, null, graphyView)
|
|
|
+ gridItem1.zOrder = 1000009f
|
|
|
+ val gridItem2 = GridItem(grid2, null, graphyView)
|
|
|
+ gridItem2.zOrder = 1000009f
|
|
|
+ val gridItem3 = GridItem(grid3, null, graphyView)
|
|
|
+ gridItem3.zOrder = 1000009f
|
|
|
+
|
|
|
+ scene.addItem(gridItem1)
|
|
|
+ scene.addItem(gridItem2)
|
|
|
+ scene.addItem(gridItem3)
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
* 初始化数据
|
|
|
*/
|
|
|
private fun initData() {
|
|
@@ -194,21 +282,45 @@ class GraphyActivity : BaseActivity() {
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
+ class MyWebViewClient : WebViewClient() {
|
|
|
+ //兼容低版本
|
|
|
+ override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
|
|
|
+ view.loadUrl(url)
|
|
|
+ return true
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onPageFinished(view: WebView, url: String) {
|
|
|
+ super.onPageFinished(view, url)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 图形点击事件
|
|
|
* */
|
|
|
private fun initSingleTopUp() {
|
|
|
scene.setOnSingleTopUp(object : FloorScene.OnSingleTopUp {
|
|
|
+ @SuppressLint("SetJavaScriptEnabled")
|
|
|
override fun onSingUp(x: Float, y: Float) {
|
|
|
+ //设置
|
|
|
+ val settings: WebSettings = webview.getSettings()
|
|
|
+ settings.javaScriptEnabled = true
|
|
|
+ settings.defaultTextEncodingName = "utf-8"
|
|
|
+ settings.builtInZoomControls = true
|
|
|
+ settings.loadsImagesAutomatically = true
|
|
|
+ settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.SINGLE_COLUMN
|
|
|
+ webview.webViewClient = MyWebViewClient()
|
|
|
+ webview.loadUrl("http://60.205.177.43:8000/APP/#/")
|
|
|
if (isFastDoubleClick()) {
|
|
|
if (isAddBaseMap) {
|
|
|
scene.removeItem(mapItem)
|
|
|
isAddBaseMap = false
|
|
|
+ webview.visibility = View.GONE
|
|
|
} else {
|
|
|
mapItem.zOrder = 1000000f
|
|
|
mapItem.isVisible = true
|
|
|
scene.addItem(mapItem)
|
|
|
isAddBaseMap = true
|
|
|
+ webview.visibility = View.VISIBLE
|
|
|
}
|
|
|
}
|
|
|
if ("pipe".equals(scene.type)) {
|
|
@@ -216,6 +328,14 @@ class GraphyActivity : BaseActivity() {
|
|
|
}
|
|
|
//选中空间完毕界面逻辑
|
|
|
if (scene.mapType.equals("space")) {
|
|
|
+ /** 4、平面图空间自动放缩定位并聚焦到某一具体空间 */
|
|
|
+// val w = graphyView.width.toFloat()
|
|
|
+// val h = graphyView.height.toFloat()
|
|
|
+// val rect = scene.choseSpace!!.boundingRect()
|
|
|
+// graphyView.setCenterPoint(PointF(rect.centerX(), rect.centerY()),
|
|
|
+// min(w / rect.width(), h / rect.height()) * 0.8f)
|
|
|
+
|
|
|
+
|
|
|
if ("space".equals(from)) {
|
|
|
quesDetail.visibility = View.GONE
|
|
|
if (!scene.choseSpace!!.data.jobStatus.equals("03")) {
|
|
@@ -306,10 +426,26 @@ class GraphyActivity : BaseActivity() {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+ private fun checkSdCardEnabled(): Boolean {
|
|
|
+ if (!InstaCameraManager.getInstance().isSdCardEnabled()) {
|
|
|
+ Toast.makeText(this, "No SD card inserted or Not enough free space", Toast.LENGTH_SHORT).show()
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ return true
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 页面全部监听事件
|
|
|
*/
|
|
|
private fun initListener() {
|
|
|
+ /** 普通拍照 */
|
|
|
+ quesIma.setOnClickListener {
|
|
|
+ InstaCameraManager.getInstance().openCamera(InstaCameraManager.CONNECT_TYPE_WIFI)
|
|
|
+ if (checkSdCardEnabled()) {
|
|
|
+ InstaCameraManager.getInstance().startNormalCapture(false)
|
|
|
+ }
|
|
|
+ }
|
|
|
/** nfc点击监听 */
|
|
|
nfc.setOnClickListener { Toast.makeText(this, "正在开发中,敬请期待", Toast.LENGTH_SHORT).show() }
|
|
|
|
|
@@ -540,17 +676,43 @@ class GraphyActivity : BaseActivity() {
|
|
|
}
|
|
|
scene.pointItemList.clear()
|
|
|
var list = params as ArrayList<ProblemsModel>
|
|
|
+ val mPoints = ArrayList<PointF>()
|
|
|
+ val point1 = PointF()
|
|
|
+ point1.set(scene.choseSpace!!.minX - 1000, scene.choseSpace!!.maxY + 1000)
|
|
|
+ val point2 = PointF()
|
|
|
+ point2.set(scene.choseSpace!!.maxX + 1000, scene.choseSpace!!.maxY + 1000)
|
|
|
+ val point3 = PointF()
|
|
|
+ point3.set(scene.choseSpace!!.minX - 1000, scene.choseSpace!!.minY - 1000)
|
|
|
+ val point4 = PointF()
|
|
|
+ point4.set(scene.choseSpace!!.maxX + 1000, scene.choseSpace!!.minY - 1000)
|
|
|
+ mPoints.add(point1)
|
|
|
+ mPoints.add(point2)
|
|
|
+ mPoints.add(point4)
|
|
|
+ mPoints.add(point3)
|
|
|
+
|
|
|
for (model in list) {
|
|
|
- val point = Point()
|
|
|
var position = gson.fromJson(model.position, Position::class.java)
|
|
|
- point.mX = position.x.toFloat()
|
|
|
- point.mY = position.y.toFloat()
|
|
|
- point.id = model.id
|
|
|
- var item = PointItem(point, null, scene.defaultPointScale)
|
|
|
- item.isVisible = true
|
|
|
- item.zOrder = 100000f
|
|
|
- scene.pointItemList.add(item)
|
|
|
- scene.addItem(item)
|
|
|
+ val polygonContainsPoint = Lasso.isPolygonContainsPoint(
|
|
|
+ mPoints,
|
|
|
+ android.graphics.Point(position.x.toFloat().toInt(), position.y.toFloat().toInt())
|
|
|
+ )
|
|
|
+ if (polygonContainsPoint) {
|
|
|
+ val point = Point()
|
|
|
+ point.mX = position.x.toFloat()
|
|
|
+ point.mY = position.y.toFloat()
|
|
|
+ point.id = model.id
|
|
|
+ var item = PointItem(point, null, scene.defaultPointScale)
|
|
|
+ item.isVisible = true
|
|
|
+ item.zOrder = 10000001f
|
|
|
+ scene.pointItemList.add(item)
|
|
|
+ scene.addItem(item)
|
|
|
+ item.setOnActionMove(object : PointItem.ActionMove {
|
|
|
+ override fun onActionMove(event: MotionEvent) {
|
|
|
+ eagleView.setCenterPoint(PointF(event.x, event.y), graphyView.scale * 10f)
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -719,25 +881,96 @@ class GraphyActivity : BaseActivity() {
|
|
|
scene.removeItem(item)
|
|
|
}
|
|
|
scene.pipeItemList.clear()
|
|
|
-
|
|
|
- for (model in spacePipeModel) {
|
|
|
+ this.spacePipeModel = spacePipeModel
|
|
|
+ for (model in this.spacePipeModel) {
|
|
|
if (!model.children.isEmpty() && !model.isCheck) {
|
|
|
for (child in model.children) {
|
|
|
val pipe = PipeLine()
|
|
|
- var points: ArrayList<ArrayList<PointF>> = ArrayList()
|
|
|
- points.add(child.position)
|
|
|
- pipe.points!!.addAll(points)
|
|
|
+
|
|
|
+ pipe.points!!.addAll(child.position)
|
|
|
+
|
|
|
val pipeItem = PipeLineItem(pipe, null)
|
|
|
pipeItem.isVisible = true
|
|
|
pipeItem.zOrder = 100000f
|
|
|
scene.pipeItemList.add(pipeItem)
|
|
|
scene.addItem(pipeItem)
|
|
|
|
|
|
+ for (point in child.position) {
|
|
|
+ val pipeNodeItem = PipeNodeItem(point, null)
|
|
|
+ pipeNodeItem.isVisible = true
|
|
|
+ pipeNodeItem.zOrder = 100000f
|
|
|
+ scene.addItem(pipeNodeItem)
|
|
|
+ scene.pipeNodeList.add(pipeNodeItem)
|
|
|
+ pipeNodeItem.setOnScrollListener(object : PipeNodeItem.OnScroll {
|
|
|
+ override fun onScroll(x: Float, y: Float) {
|
|
|
+ for (item in scene.pipeItemList) {
|
|
|
+ scene.removeItem(item)
|
|
|
+ }
|
|
|
+
|
|
|
+ val newData = PipeLine()
|
|
|
+ for (node in scene.pipeNodeList) {
|
|
|
+ val po = PointF()
|
|
|
+ po.x = node.x
|
|
|
+ po.y = node.y
|
|
|
+ newData.points!!.add(po)
|
|
|
+ }
|
|
|
+ val pipeItem2 = PipeLineItem(newData, null)
|
|
|
+ pipeItem2.isVisible = true
|
|
|
+ pipeItem2.zOrder = 100000f
|
|
|
+ scene.pipeItemList.add(pipeItem2)
|
|
|
+ scene.addItem(pipeItem2)
|
|
|
+
|
|
|
+// for (pointItem1 in scene.pipeItemList) {
|
|
|
+// for (pointList1 in pointItem1.data.points!!) {
|
|
|
+// for (point1 in pointList1) {
|
|
|
+// if (point1.x == pipeNodeItem.x && point1.y == pipeNodeItem.y) {
|
|
|
+// point1.x = x
|
|
|
+// point1.y = y
|
|
|
+// pipeNodeItem.x = x
|
|
|
+// pipeNodeItem.y = y
|
|
|
+
|
|
|
+// scene.removeItem(pointItem1)
|
|
|
+//
|
|
|
+// val newData: PipeLine = deepClone(pointItem1.data) as PipeLine
|
|
|
+// for (pl in newData.points!!) {
|
|
|
+// for (p in pl) {
|
|
|
+// if (p.x == pipeNodeItem.x && p.y == pipeNodeItem.y) {
|
|
|
+// p.x = x
|
|
|
+// p.y = y
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// val pipeItem2 = PipeLineItem(newData, null)
|
|
|
+// pipeItem2.isVisible = true
|
|
|
+// pipeItem2.zOrder = 100000f
|
|
|
+// scene.pipeItemList.add(pipeItem2)
|
|
|
+// scene.addItem(pipeItem2)
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Throws(Exception::class)
|
|
|
+ fun deepClone(data: PipeLine): Any? {
|
|
|
+ // 序列化
|
|
|
+ val bos = ByteArrayOutputStream()
|
|
|
+ val oos = ObjectOutputStream(bos)
|
|
|
+ oos.writeObject(data)
|
|
|
+ // 反序列化
|
|
|
+ val bis = ByteArrayInputStream(bos.toByteArray())
|
|
|
+ val ois = ObjectInputStream(bis)
|
|
|
+ return ois.readObject()
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 刷新地图上设备
|
|
|
*/
|
|
@@ -759,7 +992,7 @@ class GraphyActivity : BaseActivity() {
|
|
|
|
|
|
var item = EquipItem(point, null, scene.defaultPointScale)
|
|
|
item.isVisible = true
|
|
|
- item.zOrder = 100000f
|
|
|
+ item.zOrder = 10000012f
|
|
|
scene.equipList.add(item)
|
|
|
scene.addItem(item)
|
|
|
}
|
|
@@ -820,6 +1053,9 @@ class GraphyActivity : BaseActivity() {
|
|
|
"\ny轴:${point.data.mY}" +
|
|
|
"\n点击下方“问题已解决”按钮后可关闭该问题点。"
|
|
|
)
|
|
|
+ quesTv.setOnClickListener {
|
|
|
+// Toast.makeText(this@GraphyActivity, InstaCameraManager.getInstance(). + "======", Toast.LENGTH_LONG).show()
|
|
|
+ }
|
|
|
|
|
|
/** 问题已解决按钮 */
|
|
|
quesSubmit.setOnClickListener {
|
|
@@ -882,5 +1118,117 @@ class GraphyActivity : BaseActivity() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ override fun onCaptureFinish(p0: Array<out String>?) {
|
|
|
+ val time = SimpleDateFormat("HH:mm:ss").format(Date(System.currentTimeMillis()))
|
|
|
+ quesTv.text = quesTv.text.toString() + "\n$time:拍照完成"
|
|
|
+ downloadFilesAndPlay(p0)
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onCaptureStarting() {
|
|
|
+ val time = SimpleDateFormat("HH:mm:ss").format(Date(System.currentTimeMillis()))
|
|
|
+ quesTv.text = "$time:准备拍照"
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onCaptureWorking() {
|
|
|
+ val time = SimpleDateFormat("HH:mm:ss").format(Date(System.currentTimeMillis()))
|
|
|
+ quesTv.text = quesTv.text.toString() + "\n$time:拍照中"
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onCaptureStopping() {
|
|
|
+ val time = SimpleDateFormat("HH:mm:ss").format(Date(System.currentTimeMillis()))
|
|
|
+ quesTv.text = quesTv.text.toString() + "\n$time:拍照中断"
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onCameraConnectError() {
|
|
|
+ super.onCameraConnectError()
|
|
|
+ Toast.makeText(this, "相机连接失败", Toast.LENGTH_SHORT).show()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onCameraSDCardStateChanged(enabled: Boolean) {
|
|
|
+ super.onCameraSDCardStateChanged(enabled)
|
|
|
+ if (enabled) {
|
|
|
+ Toast.makeText(this, "SD卡可用", Toast.LENGTH_SHORT).show()
|
|
|
+ // Capture Status Callback
|
|
|
+ InstaCameraManager.getInstance().setCaptureStatusListener(this)
|
|
|
+ } else {
|
|
|
+ Toast.makeText(this, "SD卡异常", Toast.LENGTH_SHORT).show()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onCameraStatusChanged(enabled: Boolean) {
|
|
|
+ super.onCameraStatusChanged(enabled)
|
|
|
+ if (enabled) {
|
|
|
+ Toast.makeText(this, "相机已连接", Toast.LENGTH_SHORT).show()
|
|
|
+ } else {
|
|
|
+ NetworkManager.getInstance().clearBindProcess()
|
|
|
+ Toast.makeText(this, "相机连接断开", Toast.LENGTH_SHORT).show()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun downloadFilesAndPlay(urls: Array<out String>?) {
|
|
|
+ if (urls == null || urls.size == 0) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ val localFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + "/SDK_DEMO_CAPTURE"
|
|
|
+ val fileNames = arrayOfNulls<String>(urls.size)
|
|
|
+ val localPaths = arrayOfNulls<String>(urls.size)
|
|
|
+ var needDownload = false
|
|
|
+ val dir = File(localFolder)
|
|
|
+ if (!dir.exists()) {
|
|
|
+ dir.mkdirs()
|
|
|
+ }
|
|
|
+ for (i in localPaths.indices) {
|
|
|
+ fileNames[i] = urls[i].substring(urls[i].lastIndexOf("/") + 1)
|
|
|
+ localPaths[i] = localFolder + "/" + fileNames[i]
|
|
|
+ if (!File(localPaths[i]).exists()) {
|
|
|
+ needDownload = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!needDownload) {
|
|
|
+ val time = SimpleDateFormat("HH:mm:ss").format(Date(System.currentTimeMillis()))
|
|
|
+ quesTv.text = quesTv.text.toString() + "\n$time:文件已存在"
|
|
|
+// PlayAndExportActivity.launchActivity(this@CaptureActivity, localPaths)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ val dialog: MaterialDialog = MaterialDialog.Builder(this)
|
|
|
+ .title(R.string.osc_dialog_title_downloading)
|
|
|
+ .content(getString(R.string.osc_dialog_msg_downloading, urls.size, 0, 0))
|
|
|
+ .cancelable(false)
|
|
|
+ .canceledOnTouchOutside(false)
|
|
|
+ .show()
|
|
|
+ val successfulCount = AtomicInteger(0)
|
|
|
+ val errorCount = AtomicInteger(0)
|
|
|
+ for (i in localPaths.indices) {
|
|
|
+ val url = urls[i]
|
|
|
+ OkGo.get<File>(url).execute(object : FileCallback(localFolder, fileNames[i]) {
|
|
|
+ override fun onError(response: Response<File?>?) {
|
|
|
+ super.onError(response)
|
|
|
+ errorCount.incrementAndGet()
|
|
|
+ checkDownloadCount()
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onSuccess(response: Response<File?>?) {
|
|
|
+ successfulCount.incrementAndGet()
|
|
|
+ checkDownloadCount()
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun checkDownloadCount() {
|
|
|
+ dialog.setContent(getString(R.string.osc_dialog_msg_downloading, urls.size, successfulCount.toInt(), errorCount.toInt()))
|
|
|
+ if (successfulCount.toInt() + errorCount.toInt() >= urls.size) {
|
|
|
+// PlayAndExportActivity.launchActivity(this@CaptureActivity, localPaths)
|
|
|
+ val time = SimpleDateFormat("HH:mm:ss").format(Date(System.currentTimeMillis()))
|
|
|
+ quesTv.text = quesTv.text.toString() + "\n$time:下载完成"
|
|
|
+ dialog.dismiss()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onDestroy() {
|
|
|
+ super.onDestroy()
|
|
|
+ InstaCameraManager.getInstance().unregisterCameraChangedCallback(this)
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
} // Class GraphyActivity
|