视频下载功能

This commit is contained in:
2026-06-11 11:53:52 +08:00
parent e40403f7db
commit 57188d27cc
5 changed files with 131 additions and 11 deletions

View File

@@ -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 {

View File

@@ -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>

View File

@@ -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>