diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ed8b745..362cb59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -32,9 +32,7 @@ - + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ed8b745..362cb59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -32,9 +32,7 @@ - + diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index 7d024b9..30fe8b7 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -13,10 +13,12 @@ Manifest.permission.READ_PHONE_STATE, Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS, - Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, - Manifest.permission.READ_MEDIA_IMAGES, - Manifest.permission.MANAGE_EXTERNAL_STORAGE + Manifest.permission.CAMERA, + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.READ_MEDIA_IMAGES ) } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { arrayOf( @@ -26,8 +28,10 @@ Manifest.permission.READ_PHONE_STATE, Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS, - Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, + Manifest.permission.CAMERA, + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.MANAGE_EXTERNAL_STORAGE ) } else { @@ -38,8 +42,8 @@ Manifest.permission.READ_PHONE_STATE, Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS, - Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE ) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ed8b745..362cb59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -32,9 +32,7 @@ - + diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index 7d024b9..30fe8b7 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -13,10 +13,12 @@ Manifest.permission.READ_PHONE_STATE, Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS, - Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, - Manifest.permission.READ_MEDIA_IMAGES, - Manifest.permission.MANAGE_EXTERNAL_STORAGE + Manifest.permission.CAMERA, + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.READ_MEDIA_IMAGES ) } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { arrayOf( @@ -26,8 +28,10 @@ Manifest.permission.READ_PHONE_STATE, Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS, - Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, + Manifest.permission.CAMERA, + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.MANAGE_EXTERNAL_STORAGE ) } else { @@ -38,8 +42,8 @@ Manifest.permission.READ_PHONE_STATE, Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS, - Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE ) diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index dc0d996..be2c225 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -1,7 +1,11 @@ package com.casic.br.operationsite.view import android.content.Context +import android.graphics.Color +import android.media.MediaScannerConnection +import android.net.Uri import android.os.Bundle +import android.provider.MediaStore import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -14,11 +18,18 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.createDownloadFileDir +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.FileDownloadManager +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import java.io.File class BigImageActivity : KotlinBaseActivity() { + private val kTag = "BigImageActivity" + override fun initViewBinding(): ActivityBigImageBinding { return ActivityBigImageBinding.inflate(layoutInflater) } @@ -38,7 +49,7 @@ } override fun initEvent() { - val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) if (urls == null || urls.size == 0) { return @@ -74,17 +85,85 @@ } override fun instantiateItem(container: ViewGroup, position: Int): Any { - val view = - LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) - val photoView: PhotoView = view.findViewById(R.id.photoView) - Glide.with(context).load(data[position]).into(photoView) + val view = LayoutInflater.from(context).inflate( + R.layout.item_big_picture, container, false + ) + val photoView = view.findViewById(R.id.photoView) + + val path = data[position] + /** + * DisclosureActivity -> http://111.198.10.15:22006/static/2024-06/b237b332b00c4ce99585c61f860f30b7.jpeg + * EnvironmentActivity -> //storage/emulated/0/Android/data/com.casic.br.operationsite.test/files/Pictures/IMG20240628110803.jpg + * SuppliesActivity -> //storage/emulated/0/Android/data/com.casic.br.operationsite.test/files/Pictures/IMG20240628111403.jpg + * GuardiansActivity -> //storage/emulated/0/Android/data/com.casic.br.operationsite.test/files/Pictures/IMG20240628111506.jpg + * */ + + Glide.with(context).load(path).into(photoView) photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE container.addView(view) //点击大图取消预览 photoView.setOnClickListener { finish() } + + photoView.setOnLongClickListener { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitle(arrayListOf("保存")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> updateSystemAlbum(path) + } + } + + + }).build().show() + true + } return view } + private fun updateSystemAlbum(imagePath: String) { + if (imagePath.startsWith("http") || imagePath.startsWith("https")) { + //需要将图片保存在本地 + FileDownloadManager.Builder().setDownloadFileSource(imagePath) + .setFileSuffix("jpg").setFileSaveDirectory(createDownloadFileDir()) + .setOnFileDownloadListener(object : FileDownloadManager.OnFileDownloadListener { + override fun onDownloadEnd(file: File) { + scanFile(file) + } + + override fun onFailure(throwable: Throwable) { + + } + + override fun onProgressChanged(progress: Int) { + + } + }).build().start() + } else { + scanFile(File(imagePath)) + } + } + + private fun scanFile(file: File) { + MediaStore.Images.Media.insertImage( + contentResolver, + file.absolutePath, file.name, resources.getString(R.string.app_name) + ) + + MediaScannerConnection.scanFile(context, arrayOf(file.absolutePath), null, + object : MediaScannerConnection.MediaScannerConnectionClient { + override fun onMediaScannerConnected() { + + } + + override fun onScanCompleted(path: String?, uri: Uri?) { + "保存到相册成功".show(context) + } + }) + } + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { container.removeView(any as View) } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ed8b745..362cb59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -32,9 +32,7 @@ - + diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index 7d024b9..30fe8b7 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -13,10 +13,12 @@ Manifest.permission.READ_PHONE_STATE, Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS, - Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, - Manifest.permission.READ_MEDIA_IMAGES, - Manifest.permission.MANAGE_EXTERNAL_STORAGE + Manifest.permission.CAMERA, + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.READ_MEDIA_IMAGES ) } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { arrayOf( @@ -26,8 +28,10 @@ Manifest.permission.READ_PHONE_STATE, Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS, - Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, + Manifest.permission.CAMERA, + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.MANAGE_EXTERNAL_STORAGE ) } else { @@ -38,8 +42,8 @@ Manifest.permission.READ_PHONE_STATE, Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS, - Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE ) diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index dc0d996..be2c225 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -1,7 +1,11 @@ package com.casic.br.operationsite.view import android.content.Context +import android.graphics.Color +import android.media.MediaScannerConnection +import android.net.Uri import android.os.Bundle +import android.provider.MediaStore import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -14,11 +18,18 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.createDownloadFileDir +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.FileDownloadManager +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import java.io.File class BigImageActivity : KotlinBaseActivity() { + private val kTag = "BigImageActivity" + override fun initViewBinding(): ActivityBigImageBinding { return ActivityBigImageBinding.inflate(layoutInflater) } @@ -38,7 +49,7 @@ } override fun initEvent() { - val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) if (urls == null || urls.size == 0) { return @@ -74,17 +85,85 @@ } override fun instantiateItem(container: ViewGroup, position: Int): Any { - val view = - LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) - val photoView: PhotoView = view.findViewById(R.id.photoView) - Glide.with(context).load(data[position]).into(photoView) + val view = LayoutInflater.from(context).inflate( + R.layout.item_big_picture, container, false + ) + val photoView = view.findViewById(R.id.photoView) + + val path = data[position] + /** + * DisclosureActivity -> http://111.198.10.15:22006/static/2024-06/b237b332b00c4ce99585c61f860f30b7.jpeg + * EnvironmentActivity -> //storage/emulated/0/Android/data/com.casic.br.operationsite.test/files/Pictures/IMG20240628110803.jpg + * SuppliesActivity -> //storage/emulated/0/Android/data/com.casic.br.operationsite.test/files/Pictures/IMG20240628111403.jpg + * GuardiansActivity -> //storage/emulated/0/Android/data/com.casic.br.operationsite.test/files/Pictures/IMG20240628111506.jpg + * */ + + Glide.with(context).load(path).into(photoView) photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE container.addView(view) //点击大图取消预览 photoView.setOnClickListener { finish() } + + photoView.setOnLongClickListener { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitle(arrayListOf("保存")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> updateSystemAlbum(path) + } + } + + + }).build().show() + true + } return view } + private fun updateSystemAlbum(imagePath: String) { + if (imagePath.startsWith("http") || imagePath.startsWith("https")) { + //需要将图片保存在本地 + FileDownloadManager.Builder().setDownloadFileSource(imagePath) + .setFileSuffix("jpg").setFileSaveDirectory(createDownloadFileDir()) + .setOnFileDownloadListener(object : FileDownloadManager.OnFileDownloadListener { + override fun onDownloadEnd(file: File) { + scanFile(file) + } + + override fun onFailure(throwable: Throwable) { + + } + + override fun onProgressChanged(progress: Int) { + + } + }).build().start() + } else { + scanFile(File(imagePath)) + } + } + + private fun scanFile(file: File) { + MediaStore.Images.Media.insertImage( + contentResolver, + file.absolutePath, file.name, resources.getString(R.string.app_name) + ) + + MediaScannerConnection.scanFile(context, arrayOf(file.absolutePath), null, + object : MediaScannerConnection.MediaScannerConnectionClient { + override fun onMediaScannerConnected() { + + } + + override fun onScanCompleted(path: String?, uri: Uri?) { + "保存到相册成功".show(context) + } + }) + } + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { container.removeView(any as View) } diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt index 9ffb5f9..e6812f7 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt @@ -72,7 +72,7 @@ val bitmapArray = Base64.decode(base64, Base64.DEFAULT) val bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.size) binding.blowerImageView.setImageBitmap(bitmap) - imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.png" + imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.jpg" bitmap.saveImage(imagePath) } catch (e: Exception) { e.printStackTrace() diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ed8b745..362cb59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -32,9 +32,7 @@ - + diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index 7d024b9..30fe8b7 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -13,10 +13,12 @@ Manifest.permission.READ_PHONE_STATE, Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS, - Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, - Manifest.permission.READ_MEDIA_IMAGES, - Manifest.permission.MANAGE_EXTERNAL_STORAGE + Manifest.permission.CAMERA, + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.READ_MEDIA_IMAGES ) } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { arrayOf( @@ -26,8 +28,10 @@ Manifest.permission.READ_PHONE_STATE, Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS, - Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, + Manifest.permission.CAMERA, + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.MANAGE_EXTERNAL_STORAGE ) } else { @@ -38,8 +42,8 @@ Manifest.permission.READ_PHONE_STATE, Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS, - Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE ) diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index dc0d996..be2c225 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -1,7 +1,11 @@ package com.casic.br.operationsite.view import android.content.Context +import android.graphics.Color +import android.media.MediaScannerConnection +import android.net.Uri import android.os.Bundle +import android.provider.MediaStore import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -14,11 +18,18 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.createDownloadFileDir +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.FileDownloadManager +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import java.io.File class BigImageActivity : KotlinBaseActivity() { + private val kTag = "BigImageActivity" + override fun initViewBinding(): ActivityBigImageBinding { return ActivityBigImageBinding.inflate(layoutInflater) } @@ -38,7 +49,7 @@ } override fun initEvent() { - val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) if (urls == null || urls.size == 0) { return @@ -74,17 +85,85 @@ } override fun instantiateItem(container: ViewGroup, position: Int): Any { - val view = - LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) - val photoView: PhotoView = view.findViewById(R.id.photoView) - Glide.with(context).load(data[position]).into(photoView) + val view = LayoutInflater.from(context).inflate( + R.layout.item_big_picture, container, false + ) + val photoView = view.findViewById(R.id.photoView) + + val path = data[position] + /** + * DisclosureActivity -> http://111.198.10.15:22006/static/2024-06/b237b332b00c4ce99585c61f860f30b7.jpeg + * EnvironmentActivity -> //storage/emulated/0/Android/data/com.casic.br.operationsite.test/files/Pictures/IMG20240628110803.jpg + * SuppliesActivity -> //storage/emulated/0/Android/data/com.casic.br.operationsite.test/files/Pictures/IMG20240628111403.jpg + * GuardiansActivity -> //storage/emulated/0/Android/data/com.casic.br.operationsite.test/files/Pictures/IMG20240628111506.jpg + * */ + + Glide.with(context).load(path).into(photoView) photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE container.addView(view) //点击大图取消预览 photoView.setOnClickListener { finish() } + + photoView.setOnLongClickListener { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitle(arrayListOf("保存")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> updateSystemAlbum(path) + } + } + + + }).build().show() + true + } return view } + private fun updateSystemAlbum(imagePath: String) { + if (imagePath.startsWith("http") || imagePath.startsWith("https")) { + //需要将图片保存在本地 + FileDownloadManager.Builder().setDownloadFileSource(imagePath) + .setFileSuffix("jpg").setFileSaveDirectory(createDownloadFileDir()) + .setOnFileDownloadListener(object : FileDownloadManager.OnFileDownloadListener { + override fun onDownloadEnd(file: File) { + scanFile(file) + } + + override fun onFailure(throwable: Throwable) { + + } + + override fun onProgressChanged(progress: Int) { + + } + }).build().start() + } else { + scanFile(File(imagePath)) + } + } + + private fun scanFile(file: File) { + MediaStore.Images.Media.insertImage( + contentResolver, + file.absolutePath, file.name, resources.getString(R.string.app_name) + ) + + MediaScannerConnection.scanFile(context, arrayOf(file.absolutePath), null, + object : MediaScannerConnection.MediaScannerConnectionClient { + override fun onMediaScannerConnected() { + + } + + override fun onScanCompleted(path: String?, uri: Uri?) { + "保存到相册成功".show(context) + } + }) + } + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { container.removeView(any as View) } diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt index 9ffb5f9..e6812f7 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt @@ -72,7 +72,7 @@ val bitmapArray = Base64.decode(base64, Base64.DEFAULT) val bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.size) binding.blowerImageView.setImageBitmap(bitmap) - imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.png" + imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.jpg" bitmap.saveImage(imagePath) } catch (e: Exception) { e.printStackTrace() diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt index 3c823b2..2b7f2bb 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt @@ -184,7 +184,7 @@ Log.d(kTag, "heartRate, bloodOxygen, co, gas, h2s, o2") Log.d(kTag, "$heartRate, $bloodOxygen, $co, $gas, $h2s, $o2") - if (gas.toFloat().toInt() >= 20 + if (gas.toFloat().toInt() >= 5 && SocketManager.get.nettyClient.connectStatus ) { Log.d(kTag, "initOnCreate: 发送甲烷浓度超限报警") @@ -222,7 +222,7 @@ val base64 = (msg.obj as String).split(":")[1] val bitmapArray = Base64.decode(base64, Base64.DEFAULT) val bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.size) - val imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.png" + val imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.jpg" Log.d(kTag, "imagePath: $imagePath") bitmap.saveImage(imagePath) if (recyclerViewImages.size == 3) { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ed8b745..362cb59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -32,9 +32,7 @@ - + diff --git a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt index 7d024b9..30fe8b7 100644 --- a/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/operationsite/utils/LocaleConstant.kt @@ -13,10 +13,12 @@ Manifest.permission.READ_PHONE_STATE, Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS, - Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, - Manifest.permission.READ_MEDIA_IMAGES, - Manifest.permission.MANAGE_EXTERNAL_STORAGE + Manifest.permission.CAMERA, + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.READ_MEDIA_IMAGES ) } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { arrayOf( @@ -26,8 +28,10 @@ Manifest.permission.READ_PHONE_STATE, Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS, - Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, + Manifest.permission.CAMERA, + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.MANAGE_EXTERNAL_STORAGE ) } else { @@ -38,8 +42,8 @@ Manifest.permission.READ_PHONE_STATE, Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.WRITE_SETTINGS, - Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, + Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE ) diff --git a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt index dc0d996..be2c225 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/BigImageActivity.kt @@ -1,7 +1,11 @@ package com.casic.br.operationsite.view import android.content.Context +import android.graphics.Color +import android.media.MediaScannerConnection +import android.net.Uri import android.os.Bundle +import android.provider.MediaStore import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -14,11 +18,18 @@ import com.casic.br.operationsite.extensions.initImmersionBar import com.luck.picture.lib.photoview.PhotoView import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.createDownloadFileDir +import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.Constant +import com.pengxh.kt.lite.utils.FileDownloadManager +import com.pengxh.kt.lite.widget.dialog.BottomActionSheet +import java.io.File class BigImageActivity : KotlinBaseActivity() { + private val kTag = "BigImageActivity" + override fun initViewBinding(): ActivityBigImageBinding { return ActivityBigImageBinding.inflate(layoutInflater) } @@ -38,7 +49,7 @@ } override fun initEvent() { - val index: Int = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) + val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0) val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY) if (urls == null || urls.size == 0) { return @@ -74,17 +85,85 @@ } override fun instantiateItem(container: ViewGroup, position: Int): Any { - val view = - LayoutInflater.from(context).inflate(R.layout.item_big_picture, container, false) - val photoView: PhotoView = view.findViewById(R.id.photoView) - Glide.with(context).load(data[position]).into(photoView) + val view = LayoutInflater.from(context).inflate( + R.layout.item_big_picture, container, false + ) + val photoView = view.findViewById(R.id.photoView) + + val path = data[position] + /** + * DisclosureActivity -> http://111.198.10.15:22006/static/2024-06/b237b332b00c4ce99585c61f860f30b7.jpeg + * EnvironmentActivity -> //storage/emulated/0/Android/data/com.casic.br.operationsite.test/files/Pictures/IMG20240628110803.jpg + * SuppliesActivity -> //storage/emulated/0/Android/data/com.casic.br.operationsite.test/files/Pictures/IMG20240628111403.jpg + * GuardiansActivity -> //storage/emulated/0/Android/data/com.casic.br.operationsite.test/files/Pictures/IMG20240628111506.jpg + * */ + + Glide.with(context).load(path).into(photoView) photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE container.addView(view) //点击大图取消预览 photoView.setOnClickListener { finish() } + + photoView.setOnLongClickListener { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitle(arrayListOf("保存")) + .setItemTextColor(Color.BLUE) + .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener { + override fun onActionItemClick(position: Int) { + when (position) { + 0 -> updateSystemAlbum(path) + } + } + + + }).build().show() + true + } return view } + private fun updateSystemAlbum(imagePath: String) { + if (imagePath.startsWith("http") || imagePath.startsWith("https")) { + //需要将图片保存在本地 + FileDownloadManager.Builder().setDownloadFileSource(imagePath) + .setFileSuffix("jpg").setFileSaveDirectory(createDownloadFileDir()) + .setOnFileDownloadListener(object : FileDownloadManager.OnFileDownloadListener { + override fun onDownloadEnd(file: File) { + scanFile(file) + } + + override fun onFailure(throwable: Throwable) { + + } + + override fun onProgressChanged(progress: Int) { + + } + }).build().start() + } else { + scanFile(File(imagePath)) + } + } + + private fun scanFile(file: File) { + MediaStore.Images.Media.insertImage( + contentResolver, + file.absolutePath, file.name, resources.getString(R.string.app_name) + ) + + MediaScannerConnection.scanFile(context, arrayOf(file.absolutePath), null, + object : MediaScannerConnection.MediaScannerConnectionClient { + override fun onMediaScannerConnected() { + + } + + override fun onScanCompleted(path: String?, uri: Uri?) { + "保存到相册成功".show(context) + } + }) + } + override fun destroyItem(container: ViewGroup, position: Int, any: Any) { container.removeView(any as View) } diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt index 9ffb5f9..e6812f7 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/check/EnvironmentActivity.kt @@ -72,7 +72,7 @@ val bitmapArray = Base64.decode(base64, Base64.DEFAULT) val bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.size) binding.blowerImageView.setImageBitmap(bitmap) - imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.png" + imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.jpg" bitmap.saveImage(imagePath) } catch (e: Exception) { e.printStackTrace() diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt index 3c823b2..2b7f2bb 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/check/GuardiansActivity.kt @@ -184,7 +184,7 @@ Log.d(kTag, "heartRate, bloodOxygen, co, gas, h2s, o2") Log.d(kTag, "$heartRate, $bloodOxygen, $co, $gas, $h2s, $o2") - if (gas.toFloat().toInt() >= 20 + if (gas.toFloat().toInt() >= 5 && SocketManager.get.nettyClient.connectStatus ) { Log.d(kTag, "initOnCreate: 发送甲烷浓度超限报警") @@ -222,7 +222,7 @@ val base64 = (msg.obj as String).split(":")[1] val bitmapArray = Base64.decode(base64, Base64.DEFAULT) val bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.size) - val imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.png" + val imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.jpg" Log.d(kTag, "imagePath: $imagePath") bitmap.saveImage(imagePath) if (recyclerViewImages.size == 3) { diff --git a/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt b/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt index 70a741f..0aad7ad 100644 --- a/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt +++ b/app/src/main/java/com/casic/br/operationsite/view/check/SuppliesActivity.kt @@ -218,7 +218,7 @@ base64Array.add(base64) val bitmapArray = Base64.decode(base64, Base64.DEFAULT) val bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.size) - val imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.png" + val imagePath = "/${createImageFileDir()}/IMG${timeFormat.format(Date())}.jpg" Log.d(kTag, "imagePath: $imagePath") bitmap.saveImage(imagePath) recyclerViewImages.add(imagePath)