diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index 7576624..ba6aacd 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -13,6 +13,17 @@ + + \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index dff75fa..6a4c1c4 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -103,6 +103,8 @@ dependencies { implementation("com.contrarywind:Android-PickerView:4.1.9") // GSYVideoPlayer implementation("io.github.carguo:gsyvideoplayer:13.0.0") + //下载 + implementation("io.github.chiclaim:downloader:1.0.2") } \ No newline at end of file diff --git a/app/src/main/java/com/example/defenseapplication/liveVideo/AlarmLogActivity.kt b/app/src/main/java/com/example/defenseapplication/liveVideo/AlarmLogActivity.kt index 53d3ea3..658e3c4 100644 --- a/app/src/main/java/com/example/defenseapplication/liveVideo/AlarmLogActivity.kt +++ b/app/src/main/java/com/example/defenseapplication/liveVideo/AlarmLogActivity.kt @@ -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 { diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 46140b5..1918408 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -260,6 +260,12 @@ 提示 + 确定下载该入侵告警视频? + 确定删除该入侵告警视频? + 确定下载该入侵告警照片? + 确定删除该入侵告警照片? + 开始下载 + 删除成功 请稍候... 操作成功 操作失败 @@ -488,4 +494,5 @@ 验证失败 密码修改成功 密码修改失败 + 更新失败 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5da439d..386f106 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -235,13 +235,13 @@ Generate Invite Code - 提示 - 确定下载该入侵告警视频? - 确定删除该入侵告警视频? - 确定下载该入侵告警照片? - 确定删除该入侵告警照片? - 开始下载 - 删除成功 + Tip + Confirm to download this intrusion alarm video? + Confirm to delete this intrusion alarm video? + Confirm to download this intrusion alarm photo? + Confirm to delete this intrusion alarm photo? + Start Download + Deleted successfully Please wait... Operation successful Operation failed