PostFileActivity.kt 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707
  1. package com.jld.vod.view
  2. import android.app.ProgressDialog
  3. import android.content.Context
  4. import android.os.Handler
  5. import android.os.Looper
  6. import android.os.Message
  7. import android.widget.Toast
  8. import androidx.lifecycle.ViewModelProvider
  9. import androidx.lifecycle.observe
  10. import com.google.gson.Gson
  11. import com.jld.vod.R
  12. import com.jld.vod.base.BaseActivity
  13. import com.jld.vod.config.Config
  14. import com.jld.vod.model.bean.BaseBean
  15. import com.jld.vod.model.bean.ResultBean
  16. import com.jld.vod.model.event.UsbStatusChangeEvent
  17. import com.jld.vod.utils.HttpFileUtils
  18. import com.jld.vod.utils.LogUtils
  19. import com.jld.vod.utils.http.HttpFileUtil
  20. import com.jld.vod.utils.http.ProgressFragmentRequestBody
  21. import com.jld.vod.utils.http.ProgressListener
  22. import com.jld.vod.viewmodel.MainViewModel
  23. import com.jld.vod.viewmodel.PostFileViewModel
  24. import okhttp3.Callback
  25. import org.greenrobot.eventbus.EventBus
  26. import org.greenrobot.eventbus.Subscribe
  27. import org.greenrobot.eventbus.ThreadMode
  28. import java.io.*
  29. /**
  30. * @author ZhaoFuXin
  31. * @Email:18276061387@163.com
  32. * @description:
  33. * @date :2020/7/27 11:09
  34. */
  35. class PostFileActivity : BaseActivity() {
  36. private var strFilePath: String? = null
  37. private var gson: Gson? = null
  38. private lateinit var postFileViewModel: PostFileViewModel
  39. private lateinit var mainViewModel: MainViewModel
  40. private var progressdialog: ProgressDialog? = null
  41. private var totalitem = 0//数据大小
  42. private var lenitem = 1//当前上传数据下标
  43. private var flag = true
  44. private var context: Context? = null
  45. private lateinit var myHandler: Handler
  46. private var progressitem:Int = 0
  47. private val mHandler = object : Handler() {
  48. override fun handleMessage(msg: Message) {
  49. super.handleMessage(msg)
  50. when (msg.what) {
  51. 0 -> {
  52. val id: Int = msg.arg1
  53. val file = msg.obj as String
  54. // LogUtils.logD("id===$id====file==$file")
  55. progressdialog!!.setTitle("Uploading Movie ( $lenitem/$totalitem )")
  56. progressdialog!!.progress = id
  57. progressdialog!!.setMessage(file)
  58. progressdialog!!.setCancelable(false)
  59. progressdialog!!.setCanceledOnTouchOutside(false)
  60. progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
  61. progressdialog!!.show()
  62. if (id == 100) {
  63. progressdialog!!.dismiss()
  64. }
  65. }
  66. 1 -> {
  67. val id: Int = msg.arg1
  68. val file = msg.obj as String
  69. progressdialog!!.setTitle("Uploading Music ( $lenitem/$totalitem )")
  70. progressdialog!!.progress = id
  71. progressdialog!!.setMessage(file)
  72. progressdialog!!.setCancelable(false)
  73. progressdialog!!.setCanceledOnTouchOutside(false)
  74. progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
  75. progressdialog!!.show()
  76. if (id == 100) {
  77. progressdialog!!.dismiss()
  78. }
  79. }
  80. 2 -> {
  81. val id: Int = msg.arg1
  82. val file = msg.obj as String
  83. progressdialog!!.setTitle("Uploading Game ( $lenitem/$totalitem )")
  84. progressdialog!!.progress = id
  85. progressdialog!!.setMessage(file)
  86. progressdialog!!.setCancelable(false)
  87. progressdialog!!.setCanceledOnTouchOutside(false)
  88. progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
  89. progressdialog!!.show()
  90. if (id == 100) {
  91. progressdialog!!.dismiss()
  92. }
  93. }
  94. 3 -> {
  95. val id: Int = msg.arg1
  96. val file = msg.obj as String
  97. progressdialog!!.setTitle("Uploading Ads ( $lenitem/$totalitem )")
  98. progressdialog!!.progress = id
  99. progressdialog!!.setMessage(file)
  100. progressdialog!!.setCancelable(false)
  101. progressdialog!!.setCanceledOnTouchOutside(false)
  102. progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
  103. progressdialog!!.show()
  104. if (id == 100) {
  105. progressdialog!!.dismiss()
  106. }
  107. }
  108. }
  109. }
  110. }
  111. override fun getLayoutId(): Int {
  112. return R.layout.activity_postfile
  113. }
  114. override fun initView() {
  115. super.initView()
  116. context = this
  117. progressdialog = ProgressDialog(this@PostFileActivity)
  118. // if (myHandler==null){
  119. // myHandler = new MyHandler();
  120. // }
  121. val WorkerThread = WorkerThread()
  122. WorkerThread.start()
  123. }
  124. override fun initData() {
  125. super.initData()
  126. //初始化gson
  127. gson = Gson()
  128. //u盘路径
  129. val mIntent = intent
  130. strFilePath = mIntent.getStringExtra("path")
  131. //接收U盘广播值
  132. EventBus.getDefault().register(this)
  133. //初始化viewmodel
  134. postFileViewModel = ViewModelProvider.AndroidViewModelFactory(application)
  135. .create(PostFileViewModel::class.java)
  136. //获取未上传电影列表
  137. postFileViewModel.findResByNotUploadedmovie()
  138. //初始化电影列表
  139. initMovieList()
  140. //初始化音乐列表
  141. initMusicList()
  142. //初始化游戏列表
  143. initGameList()
  144. //初始化广告列表
  145. initAdvertList()
  146. }
  147. /**
  148. * 初始化电影列表
  149. */
  150. private fun initMovieList() {
  151. postFileViewModel.findResByNotUploadedmovieliveData.observe(this) { res ->
  152. LogUtils.logD("initMovieList" + res.data)
  153. when (res?.code) {
  154. BaseBean.SUCCESS -> {
  155. finishLoading()
  156. if (res.data!!.size != 0) {
  157. // for ((index, data) in res.data.withIndex()) {
  158. // val file = File(strFilePath, data.movieId.toString() + ".mp4")
  159. // if (file.exists()) {
  160. // totalitem++
  161. // }
  162. // }
  163. for ((index, data) in res.data.withIndex()) {
  164. val file = File(strFilePath, data.movieId.toString() + ".mp4")
  165. val mid = data.mid
  166. val resId = data.movieId
  167. if (file.exists()) {
  168. //上传电影
  169. postFileMovie(file, mid, resId)
  170. // postFileMovieByFragmentUpload(file, mid, resId)
  171. } else {
  172. if (flag) {
  173. flag = false
  174. postFileViewModel.findResByNotUploadedmusic()//继续获取未上传音乐列表
  175. }
  176. }
  177. }
  178. } else {
  179. postFileViewModel.findResByNotUploadedmusic()//继续获取未上传音乐列表
  180. }
  181. }
  182. BaseBean.ERROR -> {
  183. finishLoading()
  184. Toast.makeText(this, res.message, Toast.LENGTH_SHORT).show()
  185. }
  186. BaseBean.LOADING -> showLoading()
  187. }
  188. }
  189. }
  190. /**
  191. * 初始化音乐列表
  192. */
  193. private fun initMusicList() {
  194. postFileViewModel.findResByNotUploadedmusicliveData.observe(this) { res ->
  195. when (res?.code) {
  196. BaseBean.SUCCESS -> {
  197. flag = true
  198. finishLoading()
  199. if (res.data!!.size != 0) {
  200. for ((index, data) in res.data.withIndex()) {
  201. val file = File(strFilePath, data.musicId.toString() + ".mp3")
  202. val mid = data.mid
  203. val resId = data.musicId
  204. if (file.exists()) {
  205. //上传音乐
  206. postFileMusic(file, mid, resId)
  207. } else {
  208. if (flag) {
  209. flag = false
  210. postFileViewModel.findResByNotUploadedadvert()//继续获取未上传广告列表
  211. }
  212. }
  213. }
  214. } else {
  215. postFileViewModel.findResByNotUploadedadvert()//继续获取未上传广告列表
  216. }
  217. }
  218. BaseBean.ERROR -> {
  219. finishLoading()
  220. Toast.makeText(this, res.message, Toast.LENGTH_SHORT).show()
  221. }
  222. BaseBean.LOADING -> showLoading()
  223. }
  224. }
  225. }
  226. /**
  227. * 初始化广告列表
  228. */
  229. private fun initAdvertList() {
  230. postFileViewModel.findResByNotUploadedadvertliveData.observe(this) { res ->
  231. LogUtils.logD("initAdvertList" + res.data)
  232. when (res?.code) {
  233. BaseBean.SUCCESS -> {
  234. flag = true
  235. finishLoading()
  236. if (res.data!!.size != 0) {
  237. for ((index, data) in res.data.withIndex()) {
  238. val file = File(strFilePath, data.aid.toString() + ".mp4")
  239. val resId = data.aid
  240. if (file.exists()) {
  241. //上传广告
  242. postFileAdvert(file, 123456L, resId)
  243. } else {
  244. if (flag) {
  245. flag = false
  246. postFileViewModel.findResByNotUploadedgame()//继续获取未上传游戏列表
  247. }
  248. }
  249. }
  250. } else {
  251. postFileViewModel.findResByNotUploadedgame()//继续获取未上传游戏列表
  252. }
  253. }
  254. BaseBean.ERROR -> {
  255. finishLoading()
  256. Toast.makeText(this, res.message, Toast.LENGTH_SHORT).show()
  257. }
  258. BaseBean.LOADING -> showLoading()
  259. }
  260. }
  261. }
  262. /**
  263. * 初始化游戏列表
  264. */
  265. private fun initGameList() {
  266. //监听游戏列表
  267. postFileViewModel.findResByNotUploadedgameliveData.observe(this) { res ->
  268. // LogUtils.logD("game"+res)
  269. when (res?.code) {
  270. BaseBean.SUCCESS -> {
  271. finishLoading()
  272. if (res.data!!.size != 0) {
  273. for ((index, data) in res.data.withIndex()) {
  274. val file = File(strFilePath, data.gid.toString() + ".apk")
  275. val mid = data.mid
  276. val resId = data.gid
  277. if (file.exists()) {
  278. //上传游戏
  279. postFileGame(file, mid, resId)
  280. }
  281. }
  282. } else {
  283. LogUtils.logD("上传数据为空")
  284. }
  285. }
  286. BaseBean.ERROR -> {
  287. finishLoading()
  288. Toast.makeText(this, res.message, Toast.LENGTH_SHORT).show()
  289. }
  290. BaseBean.LOADING -> showLoading()
  291. }
  292. }
  293. }
  294. /**
  295. * 上传游戏
  296. */
  297. private fun postFileGame(file: File, mid: Long, resId: Long) {
  298. totalitem++
  299. HttpFileUtil.getInstance().postFile(this, Config.ApiBaseUrl + "/game/upload",
  300. object : ProgressListener {
  301. override fun onProgress(currentBytes: Long, contentLength: Long, done: Boolean) {
  302. // Log.i(TAG, "file="+file.getName()+"id="+id+"currentBytes==" + currentBytes + "==contentLength==" + contentLength + "==done==" + done);
  303. val progress = (currentBytes * 100 / contentLength).toInt()
  304. if (done == true) {
  305. lenitem++
  306. if (lenitem == totalitem) {
  307. //数据下标重置
  308. lenitem = 1
  309. totalitem = 0
  310. //postFileViewModel.findResByNotUploadedgame()//继续获取未上传游戏列表
  311. }
  312. }
  313. val msg: Message = mHandler.obtainMessage()
  314. msg.arg1 = progress
  315. msg.what = 2
  316. msg.obj = file.name
  317. mHandler.sendMessage(msg)
  318. }
  319. }, object : Callback {
  320. override fun onFailure(call: okhttp3.Call, e: IOException) {
  321. LogUtils.logE(e.toString())
  322. }
  323. @Throws(IOException::class)
  324. override fun onResponse(call: okhttp3.Call, response: okhttp3.Response) {
  325. val result = response.body!!.string()
  326. LogUtils.logD(result.toString())
  327. }
  328. }, file, mid, resId
  329. )
  330. }
  331. /**
  332. * 上传音乐
  333. */
  334. private fun postFileMusic(file: File, mid: Long, resId: Long) {
  335. totalitem++
  336. HttpFileUtil.getInstance().postFile(this, Config.ApiBaseUrl + "/music/upload",
  337. object : ProgressListener {
  338. override fun onProgress(currentBytes: Long, contentLength: Long, done: Boolean) {
  339. // Log.i(TAG, "file="+file.getName()+"id="+id+"currentBytes==" + currentBytes + "==contentLength==" + contentLength + "==done==" + done);
  340. val progress = (currentBytes * 100 / contentLength).toInt()
  341. if (done == true) {
  342. lenitem++
  343. if (lenitem == totalitem) {
  344. //数据下标重置
  345. lenitem = 1
  346. totalitem = 0
  347. postFileViewModel.findResByNotUploadedadvert()//继续获取未上传广告列表
  348. }
  349. }
  350. val msg: Message = mHandler.obtainMessage()
  351. msg.arg1 = progress
  352. msg.what = 1
  353. msg.obj = file.name
  354. mHandler.sendMessage(msg)
  355. }
  356. }, object : Callback {
  357. override fun onFailure(call: okhttp3.Call, e: IOException) {
  358. LogUtils.logE(e.toString())
  359. }
  360. @Throws(IOException::class)
  361. override fun onResponse(call: okhttp3.Call, response: okhttp3.Response) {
  362. val result = response.body!!.string()
  363. LogUtils.logD(result.toString())
  364. }
  365. }, file, mid, resId
  366. )
  367. }
  368. /**
  369. * 上传音乐
  370. */
  371. private fun postFileAdvert(file: File, mid: Long, resId: Long) {
  372. totalitem++
  373. HttpFileUtil.getInstance().postFile(this, Config.ApiBaseUrl + "/advert/upload",
  374. object : ProgressListener {
  375. override fun onProgress(currentBytes: Long, contentLength: Long, done: Boolean) {
  376. // Log.i(TAG, "file="+file.getName()+"id="+id+"currentBytes==" + currentBytes + "==contentLength==" + contentLength + "==done==" + done);
  377. val progress = (currentBytes * 100 / contentLength).toInt()
  378. if (done == true) {
  379. lenitem++
  380. if (lenitem == totalitem) {
  381. //数据下标重置
  382. lenitem = 1
  383. totalitem = 0
  384. postFileViewModel.findResByNotUploadedgame()//继续获取未上传游戏列表
  385. }
  386. }
  387. val msg: Message = mHandler.obtainMessage()
  388. msg.arg1 = progress
  389. msg.what = 3
  390. msg.obj = file.name
  391. mHandler.sendMessage(msg)
  392. }
  393. }, object : Callback {
  394. override fun onFailure(call: okhttp3.Call, e: IOException) {
  395. LogUtils.logE(e.toString())
  396. }
  397. @Throws(IOException::class)
  398. override fun onResponse(call: okhttp3.Call, response: okhttp3.Response) {
  399. val result = response.body!!.string()
  400. LogUtils.logD(result.toString())
  401. }
  402. }, file, mid, resId
  403. )
  404. }
  405. /**
  406. * 上传电影
  407. */
  408. private fun postFileMovie(file: File, mid: Long, resId: Long) {
  409. totalitem++
  410. HttpFileUtil.getInstance().postFile(this, Config.ApiBaseUrl + "/movie/upload",
  411. object : ProgressListener {
  412. override fun onProgress(currentBytes: Long, contentLength: Long, done: Boolean) {
  413. // Log.i("PostFile====", "file="+file.getName()+"currentBytes==" + currentBytes + "==contentLength==" + contentLength + "==done==" + done);
  414. val progress = (currentBytes * 100 / contentLength).toInt()
  415. if (done) {
  416. if (lenitem == totalitem) {
  417. //数据下标重置
  418. lenitem = 1
  419. totalitem = 0
  420. postFileViewModel.findResByNotUploadedmusic()//继续获取未上传音乐列表
  421. }
  422. lenitem++
  423. }
  424. if (progress > progressitem)
  425. {
  426. progressitem = progress
  427. val msg: Message = mHandler.obtainMessage()
  428. msg.arg1 = progress
  429. msg.what = 0
  430. msg.obj = file.name
  431. mHandler.sendMessage(msg)
  432. if (progress >= 100)
  433. {
  434. progressitem = 0
  435. }
  436. }
  437. }
  438. }, object : Callback {
  439. override fun onFailure(call: okhttp3.Call, e: IOException) {
  440. LogUtils.logE(e.toString())
  441. }
  442. @Throws(IOException::class)
  443. override fun onResponse(call: okhttp3.Call, response: okhttp3.Response) {
  444. val result = response.body!!.string()
  445. LogUtils.logD(result.toString())
  446. }
  447. }, file, mid, resId
  448. )
  449. }
  450. /**
  451. * 电影上传分片
  452. */
  453. private fun postFileMovieByFragmentUpload(file: File, mid: Long, resId: Long) {
  454. LogUtils.logD("进入分片上传")
  455. // Thread {
  456. // totalitem++
  457. // }.start()
  458. //// //触发第一次UI
  459. var msg: Message = myHandler.obtainMessage()
  460. msg.arg1 = 0//当前进度 按分片进度进行
  461. msg.what = 123
  462. msg.obj = file.name
  463. myHandler.sendMessage(msg)
  464. //将数据分片
  465. var s1 = file.name //文件名称
  466. //计算文件总分片大小
  467. var length = file.length() //当前文件大小
  468. var total = 0 //总分片大小
  469. var chunkSize = 100 * 1024 * 1024 //分片大小 最好是long型
  470. total = if (length % chunkSize == 0L) {
  471. (length / chunkSize).toInt()
  472. } else {
  473. (length / chunkSize).toInt() + 1
  474. }
  475. LogUtils.logD("当前分片数大小:$total")
  476. var tmp = true //读取进度结束符
  477. var index = 0
  478. //获取缓存地址
  479. // val cachePath = cacheDir
  480. var uploadIndex = 0 //当前已上传的分片
  481. while (tmp) {//这里true一直在循环就阻塞了
  482. //判断当前已分个数 和已上传分片个数差值 现在只允许4个同时上传
  483. if ((index - uploadIndex) < 1) { //(index - uploadIndex) < 1
  484. // Thread(Runnable {
  485. var offset = chunkSize * index * 1L
  486. var block: ByteArray? = getBlock(offset, file, chunkSize)
  487. if (block != null) {
  488. var filePath =
  489. cacheDir.absolutePath + "/" + s1 + "_" + index + ".tmp" //缓存目录 外部自定义
  490. var out: OutputStream = FileOutputStream(filePath)
  491. var inputStream: InputStream = ByteArrayInputStream(block)
  492. var buff = ByteArray(1024)
  493. var len = 0
  494. while (inputStream.read(buff).also { len = it } != -1) {
  495. out.write(buff, 0, len)
  496. }
  497. inputStream.close()
  498. out.close()
  499. LogUtils.logD("开始上传" + filePath)
  500. HttpFileUtils.postFileByFragmentUpload(
  501. Config.ApiBaseUrl + "/movie/uploadFile",
  502. object : ProgressListener {
  503. override fun onProgress(
  504. currentBytes: Long,
  505. contentLength: Long,
  506. done: Boolean
  507. ) {
  508. //UI进度展示问题
  509. //LogUtils.logD("当前进度:currentBytes=$currentBytes====contentLength=$contentLength===" + done)
  510. // var msg: Message = myHandler.obtainMessage()
  511. // msg.arg1 = progress//当前进度 按分片进度进行
  512. // msg.what = 123
  513. // msg.obj = file.name
  514. // myHandler.sendMessage(msg)
  515. //一会在处理...
  516. }
  517. },
  518. object : Callback {
  519. override fun onFailure(call: okhttp3.Call, e: IOException) {
  520. LogUtils.logE(e.toString())
  521. }
  522. @Throws(IOException::class)
  523. override fun onResponse(
  524. call: okhttp3.Call,
  525. response: okhttp3.Response
  526. ) {
  527. val result = response.body!!.string()
  528. // LogUtils.logD(result.toString())
  529. val resultData = gson!!.fromJson(result, ResultBean::class.java)
  530. //设置当前已完成的片数
  531. if (resultData.flag) {
  532. //估计会有线程安全问题
  533. uploadIndex++//计数已上传个数
  534. File(filePath).delete()//删除缓存文件
  535. //根据返回值判断是否上传完成
  536. if (resultData.message == "1") {
  537. // 通知
  538. var msg: Message = myHandler.obtainMessage()
  539. msg.what = 4
  540. myHandler.sendMessage(msg)
  541. }
  542. // UI更新
  543. var msg: Message = myHandler.obtainMessage()
  544. msg.arg1 = (uploadIndex * 100 / total)//当前进度 按分片进度进行
  545. msg.what = 123
  546. msg.obj = file.name
  547. myHandler.sendMessage(msg)
  548. LogUtils.logD("当前上传进度uploadIndex=$uploadIndex==total=$total:" + (uploadIndex * 100 / total))
  549. }
  550. }
  551. }, File(filePath), total, chunkSize * 1L, "111", s1, index, resId, mid
  552. )
  553. index++
  554. } else {
  555. tmp = false
  556. }
  557. }
  558. }
  559. }
  560. inner class WorkerThread : Thread() {
  561. override fun run() {
  562. super.run()
  563. Looper.prepare()
  564. myHandler = object : Handler() {
  565. override fun handleMessage(msg: Message) {
  566. super.handleMessage(msg)
  567. when (msg.what) {
  568. 123 -> {
  569. val id: Int = msg.arg1
  570. val file = msg.obj as String
  571. //LogUtils.logD("id===$id====file==$file lenitem==$lenitem====totalitem==$totalitem ")
  572. progressdialog!!.setTitle("Uploading Movie ( $lenitem/$totalitem )")
  573. progressdialog!!.progress = id
  574. progressdialog!!.setMessage(file)
  575. progressdialog!!.setCancelable(false)
  576. progressdialog!!.setCanceledOnTouchOutside(false)
  577. progressdialog!!.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)
  578. progressdialog!!.show()
  579. if (id == 100) {
  580. progressdialog!!.dismiss()
  581. }
  582. }
  583. 4->{
  584. lenitem++
  585. if (lenitem == totalitem) {
  586. //数据下标重置
  587. lenitem = 1
  588. totalitem = 0
  589. postFileViewModel.findResByNotUploadedmusic()//继续获取未上传音乐列表
  590. }
  591. }
  592. 5->{
  593. lenitem++
  594. }
  595. }
  596. }
  597. }
  598. Looper.loop()
  599. }
  600. }
  601. /**
  602. * 文件分块工具
  603. *
  604. * @param offset 起始偏移位置
  605. * @param file 文件
  606. * @param blockSize 分块大小
  607. * @return 分块数据
  608. */
  609. private fun getBlock(offset: Long, file: File?, blockSize: Int): ByteArray? {
  610. val result = ByteArray(blockSize)
  611. var accessFile: RandomAccessFile? = null
  612. try {
  613. accessFile = RandomAccessFile(file, "r")
  614. accessFile.seek(offset)
  615. val readSize: Int = accessFile.read(result)
  616. return if (readSize == -1) {
  617. null
  618. } else if (readSize == blockSize) {
  619. result
  620. } else {
  621. val tmpByte = ByteArray(readSize)
  622. System.arraycopy(result, 0, tmpByte, 0, readSize)
  623. tmpByte
  624. }
  625. } catch (e: IOException) {
  626. e.printStackTrace()
  627. } finally {
  628. if (accessFile != null) {
  629. try {
  630. accessFile.close()
  631. } catch (e1: IOException) {
  632. }
  633. }
  634. }
  635. return null
  636. }
  637. override fun onDestroy() {
  638. super.onDestroy()
  639. progressdialog!!.dismiss()
  640. if (EventBus.getDefault().isRegistered(this)) {
  641. EventBus.getDefault().unregister(this)
  642. }
  643. }
  644. /**
  645. * 广播传来值处理
  646. * @param event
  647. */
  648. @Subscribe(threadMode = ThreadMode.MAIN)
  649. fun onNetworkChangeEvent(event: UsbStatusChangeEvent) {
  650. if (event.isConnected) {
  651. finish()
  652. }
  653. }
  654. }