视频下载功能
This commit is contained in:
@@ -3,7 +3,9 @@ package com.example.defenseapplication.liveVideo
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.media.AudioManager
|
||||
import android.media.MediaScannerConnection
|
||||
import android.os.Bundle
|
||||
import android.os.Environment
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.widget.Toast
|
||||
@@ -11,6 +13,7 @@ import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.media3.exoplayer.offline.Download
|
||||
import com.example.defenseapplication.R
|
||||
import com.example.defenseapplication.adapter.AlarmLogAdapter
|
||||
import com.example.defenseapplication.bean.DeviceAlarmBean
|
||||
@@ -22,6 +25,7 @@ import com.shuyu.gsyvideoplayer.utils.OrientationUtils
|
||||
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
|
||||
import com.bigkoo.pickerview.builder.TimePickerBuilder
|
||||
import com.bigkoo.pickerview.listener.OnTimeSelectListener
|
||||
import com.chiclaim.android.downloader.Downloader
|
||||
import com.example.defenseapplication.view.CustomDialogFragment
|
||||
import com.example.defenseapplication.view.LoadingDialog
|
||||
import com.example.defenseapplication.view.MyGSYVideoPlayer
|
||||
@@ -29,8 +33,12 @@ import com.example.defenseapplication.view.showDefenseDialog
|
||||
import com.gyf.immersionbar.ImmersionBar
|
||||
import com.shuyu.gsyvideoplayer.GSYVideoManager
|
||||
import kotlinx.coroutines.launch
|
||||
import java.io.File
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
import android.net.Uri
|
||||
import com.chiclaim.android.downloader.DownloadRequest
|
||||
import com.chiclaim.android.downloader.DownloadListener
|
||||
|
||||
//告警记录
|
||||
class AlarmLogActivity : AppCompatActivity() {
|
||||
@@ -46,7 +54,6 @@ class AlarmLogActivity : AppCompatActivity() {
|
||||
|
||||
private var isMute = false
|
||||
private lateinit var audioManager: AudioManager
|
||||
private var isRightMenuVisible = false
|
||||
private var currentAlarmItem: DeviceAlarmBean? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
@@ -234,9 +241,39 @@ class AlarmLogActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
binding.ivDownload.setOnClickListener {
|
||||
showConfirmDialog(getString(R.string.tip), getString(R.string.download_alarm_video_confirm)) {
|
||||
// 下载逻辑
|
||||
Toast.makeText(this, getString(R.string.download_start), Toast.LENGTH_SHORT).show()
|
||||
|
||||
// val item = currentAlarmItem
|
||||
//
|
||||
// if (item?.video.isNullOrEmpty()) {
|
||||
// Toast.makeText(
|
||||
// this,
|
||||
// "没有可下载的视频",
|
||||
// Toast.LENGTH_SHORT
|
||||
// ).show()
|
||||
// return@setOnClickListener
|
||||
// }
|
||||
|
||||
showConfirmDialog(
|
||||
getString(R.string.tip),
|
||||
getString(R.string.download_alarm_video_confirm)
|
||||
) {
|
||||
|
||||
//downloadVideo(item!!.video)
|
||||
downloadVideo(
|
||||
"https://media.w3.org/2010/05/sintel/trailer.mp4"
|
||||
)
|
||||
|
||||
Toast.makeText(
|
||||
this,
|
||||
"开始下载",
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
|
||||
Toast.makeText(
|
||||
this,
|
||||
getString(R.string.download_start),
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
}
|
||||
binding.ivDelete.setOnClickListener {
|
||||
@@ -307,6 +344,69 @@ class AlarmLogActivity : AppCompatActivity() {
|
||||
showDefenseDialog(config, onPositiveClick = { onConfirm() })
|
||||
}
|
||||
|
||||
private fun downloadVideo(url: String) {
|
||||
|
||||
val dir = File(
|
||||
Environment.getExternalStoragePublicDirectory(
|
||||
Environment.DIRECTORY_MOVIES
|
||||
),
|
||||
"AlarmVideo"
|
||||
)
|
||||
|
||||
if (!dir.exists()) {
|
||||
dir.mkdirs()
|
||||
}
|
||||
|
||||
val targetFile = File(
|
||||
dir,
|
||||
"${System.currentTimeMillis()}.mp4"
|
||||
)
|
||||
|
||||
val request = DownloadRequest(
|
||||
this,
|
||||
url
|
||||
)
|
||||
.setDestinationUri(Uri.fromFile(targetFile))
|
||||
.registerListener(object : DownloadListener {
|
||||
|
||||
override fun onDownloadStart() {
|
||||
Log.d("DOWNLOAD", "开始下载")
|
||||
}
|
||||
|
||||
override fun onProgressUpdate(percent: Int) {
|
||||
Log.d("DOWNLOAD", "进度:$percent%")
|
||||
}
|
||||
override fun onDownloadComplete(uri: Uri) {
|
||||
MediaScannerConnection.scanFile(
|
||||
this@AlarmLogActivity,
|
||||
arrayOf(targetFile.absolutePath),
|
||||
arrayOf("video/mp4"),
|
||||
null
|
||||
)
|
||||
|
||||
runOnUiThread {
|
||||
Toast.makeText(
|
||||
this@AlarmLogActivity,
|
||||
"下载成功",
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDownloadFailed(e: Throwable) {
|
||||
runOnUiThread {
|
||||
Toast.makeText(
|
||||
this@AlarmLogActivity,
|
||||
"下载失败:${e.message}",
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
request.startDownload()
|
||||
}
|
||||
|
||||
private fun deleteAlarmItem(id: String, loadingDialog: LoadingDialog) {
|
||||
lifecycleScope.launch {
|
||||
try {
|
||||
|
||||
@@ -260,6 +260,12 @@
|
||||
|
||||
<!-- Dialog -->
|
||||
<string name="tip">提示</string>
|
||||
<string name="download_alarm_video_confirm">确定下载该入侵告警视频?</string>
|
||||
<string name="delete_alarm_video_confirm">确定删除该入侵告警视频?</string>
|
||||
<string name="download_alarm_photo_confirm">确定下载该入侵告警照片?</string>
|
||||
<string name="delete_alarm_photo_confirm">确定删除该入侵告警照片?</string>
|
||||
<string name="download_start">开始下载</string>
|
||||
<string name="delete_success">删除成功</string>
|
||||
<string name="please_wait">请稍候...</string>
|
||||
<string name="operation_success">操作成功</string>
|
||||
<string name="operation_failed">操作失败</string>
|
||||
@@ -488,4 +494,5 @@
|
||||
<string name="verify_failed">验证失败</string>
|
||||
<string name="password_update_success">密码修改成功</string>
|
||||
<string name="password_update_failed">密码修改失败</string>
|
||||
<string name="update_failed">更新失败</string>
|
||||
</resources>
|
||||
@@ -235,13 +235,13 @@
|
||||
<string name="generate_invite_code">Generate Invite Code</string>
|
||||
|
||||
<!-- Dialog -->
|
||||
<string name="tip">提示</string>
|
||||
<string name="download_alarm_video_confirm">确定下载该入侵告警视频?</string>
|
||||
<string name="delete_alarm_video_confirm">确定删除该入侵告警视频?</string>
|
||||
<string name="download_alarm_photo_confirm">确定下载该入侵告警照片?</string>
|
||||
<string name="delete_alarm_photo_confirm">确定删除该入侵告警照片?</string>
|
||||
<string name="download_start">开始下载</string>
|
||||
<string name="delete_success">删除成功</string>
|
||||
<string name="tip">Tip</string>
|
||||
<string name="download_alarm_video_confirm">Confirm to download this intrusion alarm video?</string>
|
||||
<string name="delete_alarm_video_confirm">Confirm to delete this intrusion alarm video?</string>
|
||||
<string name="download_alarm_photo_confirm">Confirm to download this intrusion alarm photo?</string>
|
||||
<string name="delete_alarm_photo_confirm">Confirm to delete this intrusion alarm photo?</string>
|
||||
<string name="download_start">Start Download</string>
|
||||
<string name="delete_success">Deleted successfully</string>
|
||||
<string name="please_wait">Please wait...</string>
|
||||
<string name="operation_success">Operation successful</string>
|
||||
<string name="operation_failed">Operation failed</string>
|
||||
|
||||
Reference in New Issue
Block a user