From 4230457ee9edca6af738ec3f832ed0f49d0d99c3 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期三, 04 十二月 2024 18:10:30 +0800
Subject: [PATCH] 1.下载地图瓦片判断是否有网。 2.没有上传成功的巡检坐标有网时重新上传。 3.添加网络判断的工具类
---
app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java | 186 +++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 172 insertions(+), 14 deletions(-)
diff --git a/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java b/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
index fb91e02..cebbdd9 100644
--- a/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
+++ b/app/src/main/java/com/dayu/pipirrapp/activity/OrderDealActivity.java
@@ -1,14 +1,15 @@
package com.dayu.pipirrapp.activity;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
import android.os.Bundle;
-import android.provider.MediaStore;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
-import android.view.animation.Animation;
-import android.view.animation.AnimationUtils;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.SimpleItemAnimator;
@@ -17,20 +18,31 @@
import com.dayu.pipirrapp.databinding.ActivityOrderDealBinding;
import com.dayu.pipirrapp.tool.FullyGridLayoutManager;
import com.dayu.pipirrapp.tool.GlideEngine;
+import com.dayu.pipirrapp.view.TitleBar;
import com.luck.picture.lib.basic.PictureSelectionModel;
import com.luck.picture.lib.basic.PictureSelector;
-import com.luck.picture.lib.config.PictureConfig;
+import com.luck.picture.lib.config.PictureMimeType;
import com.luck.picture.lib.config.SelectMimeType;
-import com.luck.picture.lib.config.SelectModeConfig;
import com.luck.picture.lib.decoration.GridSpacingItemDecoration;
+import com.luck.picture.lib.engine.CompressFileEngine;
+import com.luck.picture.lib.engine.ImageEngine;
import com.luck.picture.lib.entity.LocalMedia;
-import com.luck.picture.lib.interfaces.OnGridItemSelectAnimListener;
-import com.luck.picture.lib.interfaces.OnQueryFilterListener;
-import com.luck.picture.lib.interfaces.OnSelectAnimListener;
+import com.luck.picture.lib.entity.MediaExtraInfo;
+import com.luck.picture.lib.interfaces.OnExternalPreviewEventListener;
+import com.luck.picture.lib.interfaces.OnKeyValueResultCallbackListener;
+import com.luck.picture.lib.utils.DateUtils;
import com.luck.picture.lib.utils.DensityUtil;
+import com.luck.picture.lib.utils.MediaUtils;
+import com.luck.picture.lib.utils.PictureFileUtils;
+import java.io.File;
import java.util.ArrayList;
import java.util.List;
+
+import top.zibin.luban.CompressionPredicate;
+import top.zibin.luban.Luban;
+import top.zibin.luban.OnNewCompressListener;
+import top.zibin.luban.OnRenameListener;
/**
* OrderDealDetailActivity -
@@ -41,24 +53,28 @@
* @since 2024-11-27
*/
public class OrderDealActivity extends BaseActivity {
-
+ private String TAG = "OrderDealActivity";
ActivityOrderDealBinding binding;
RecyclerView mRecyclerView;
AddPictureAdapter mAdapter;
int maxSelectNum = 10;//鏈�澶х収鐗�
int maxSelectVideoNum = 0;//鏈�澶ц棰�
private final List<LocalMedia> mData = new ArrayList<>();
+ private ActivityResultLauncher<Intent> launcherResult;
+ private ImageEngine imageEngine;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityOrderDealBinding.inflate(LayoutInflater.from(this));
setContentView(binding.getRoot());
+ launcherResult = createActivityResultLauncher();
initView();
}
void initView() {
+ new TitleBar(this).setTitleText("澶勭悊宸ュ崟").setLeftIco().setLeftIcoListening(v -> OrderDealActivity.this.finish());
mRecyclerView = binding.recycler;
FullyGridLayoutManager manager = new FullyGridLayoutManager(this,
4, GridLayoutManager.VERTICAL, false);
@@ -72,29 +88,171 @@
mAdapter = new AddPictureAdapter(this, mData);
mAdapter.setSelectMax(maxSelectNum + maxSelectVideoNum);
mRecyclerView.setAdapter(mAdapter);
+ imageEngine = GlideEngine.createGlideEngine();
mAdapter.setOnItemClickListener(new AddPictureAdapter.OnItemClickListener() {
@Override
public void onItemClick(View v, int position) {
-
+ // 棰勮鍥剧墖銆佽棰戙�侀煶棰�
+ PictureSelector.create(OrderDealActivity.this)
+ .openPreview()
+ .setImageEngine(imageEngine)
+ .setExternalPreviewEventListener(new MyExternalPreviewEventListener())
+ .startActivityPreview(position, true, mAdapter.getData());
}
@Override
public void openPicture() {
+ //娣诲姞鍥剧墖
mOpenPicture();
}
});
}
+ /**
+ * 娣诲姞鍥剧墖
+ */
private void mOpenPicture() {
// 杩涘叆鐩稿唽
PictureSelectionModel selectionModel = PictureSelector.create(this)
.openGallery(SelectMimeType.ofImage())
.setMaxSelectNum(maxSelectNum)
.setMaxVideoSelectNum(maxSelectVideoNum)
- .setImageEngine(GlideEngine.createGlideEngine())
+ .setImageEngine(imageEngine)
+ //璁剧疆鍥剧墖鍘嬬缉
+ .setCompressEngine(new ImageFileCompressEngine())
.setSelectedData(mAdapter.getData());
- selectionModel.forResult(PictureConfig.CHOOSE_REQUEST);
+ selectionModel.forResult(launcherResult);
+ }
+
+ /**
+ * 鍒涘缓涓�涓狝ctivityResultLauncher
+ *
+ * @return
+ */
+ private ActivityResultLauncher<Intent> createActivityResultLauncher() {
+ return registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
+ result -> {
+ int resultCode = result.getResultCode();
+ if (resultCode == RESULT_OK) {
+ ArrayList<LocalMedia> selectList = PictureSelector.obtainSelectorList(result.getData());
+ analyticalSelectResults(selectList);
+ } else if (resultCode == RESULT_CANCELED) {
+ Log.i(TAG, "onActivityResult PictureSelector Cancel");
+ }
+ });
+ }
+
+ /**
+ * 澶栭儴棰勮鐩戝惉浜嬩欢
+ */
+ private class MyExternalPreviewEventListener implements OnExternalPreviewEventListener {
+
+ @Override
+ public void onPreviewDelete(int position) {
+ mAdapter.remove(position);
+ mAdapter.notifyItemRemoved(position);
+ }
+
+ @Override
+ public boolean onLongPressDownload(Context context, LocalMedia media) {
+ return false;
+ }
+ }
+
+ /**
+ * 澶勭悊閫夋嫨缁撴灉
+ *
+ * @param result
+ */
+ private void analyticalSelectResults(ArrayList<LocalMedia> result) {
+ for (LocalMedia media : result) {
+ if (media.getWidth() == 0 || media.getHeight() == 0) {
+ if (PictureMimeType.isHasImage(media.getMimeType())) {
+ MediaExtraInfo imageExtraInfo = MediaUtils.getImageSize(this, media.getPath());
+ media.setWidth(imageExtraInfo.getWidth());
+ media.setHeight(imageExtraInfo.getHeight());
+ } else if (PictureMimeType.isHasVideo(media.getMimeType())) {
+ MediaExtraInfo videoExtraInfo = MediaUtils.getVideoSize(this, media.getPath());
+ media.setWidth(videoExtraInfo.getWidth());
+ media.setHeight(videoExtraInfo.getHeight());
+ }
+ }
+ Log.i(TAG, "鏂囦欢鍚�: " + media.getFileName());
+ Log.i(TAG, "鏄惁鍘嬬缉:" + media.isCompressed());
+ Log.i(TAG, "鍘嬬缉:" + media.getCompressPath());
+ Log.i(TAG, "鍒濆璺緞:" + media.getPath());
+ Log.i(TAG, "缁濆璺緞:" + media.getRealPath());
+ Log.i(TAG, "鏄惁瑁佸壀:" + media.isCut());
+ Log.i(TAG, "瑁佸壀璺緞:" + media.getCutPath());
+ Log.i(TAG, "鏄惁寮�鍚師鍥�:" + media.isOriginal());
+ Log.i(TAG, "鍘熷浘璺緞:" + media.getOriginalPath());
+ Log.i(TAG, "娌欑洅璺緞:" + media.getSandboxPath());
+ Log.i(TAG, "姘村嵃璺緞:" + media.getWatermarkPath());
+ Log.i(TAG, "瑙嗛缂╃暐鍥�:" + media.getVideoThumbnailPath());
+ Log.i(TAG, "鍘熷瀹介珮: " + media.getWidth() + "x" + media.getHeight());
+ Log.i(TAG, "瑁佸壀瀹介珮: " + media.getCropImageWidth() + "x" + media.getCropImageHeight());
+ Log.i(TAG, "鏂囦欢澶у皬: " + PictureFileUtils.formatAccurateUnitFileSize(media.getSize()));
+ Log.i(TAG, "鏂囦欢鏃堕暱: " + media.getDuration());
+ }
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ boolean isMaxSize = result.size() == mAdapter.getSelectMax();
+ int oldSize = mAdapter.getData().size();
+ mAdapter.notifyItemRangeRemoved(0, isMaxSize ? oldSize + 1 : oldSize);
+ mAdapter.getData().clear();
+
+ mAdapter.getData().addAll(result);
+ mAdapter.notifyItemRangeInserted(0, result.size());
+ }
+ });
+ }
+
+
+ /**
+ * 鑷畾涔夊浘鐗囧帇缂�
+ */
+ private static class ImageFileCompressEngine implements CompressFileEngine {
+
+ @Override
+ public void onStartCompress(Context context, ArrayList<Uri> source, OnKeyValueResultCallbackListener call) {
+ Luban.with(context).load(source).ignoreBy(100).setRenameListener(new OnRenameListener() {
+ @Override
+ public String rename(String filePath) {
+ int indexOf = filePath.lastIndexOf(".");
+ String postfix = indexOf != -1 ? filePath.substring(indexOf) : ".jpg";
+ return DateUtils.getCreateFileName("CMP_") + postfix;
+ }
+ }).filter(new CompressionPredicate() {
+ @Override
+ public boolean apply(String path) {
+ if (PictureMimeType.isUrlHasImage(path) && !PictureMimeType.isHasHttp(path)) {
+ return true;
+ }
+ return !PictureMimeType.isUrlHasGif(path);
+ }
+ }).setCompressListener(new OnNewCompressListener() {
+ @Override
+ public void onStart() {
+
+ }
+
+ @Override
+ public void onSuccess(String source, File compressFile) {
+ if (call != null) {
+ call.onCallback(source, compressFile.getAbsolutePath());
+ }
+ }
+
+ @Override
+ public void onError(String source, Throwable e) {
+ if (call != null) {
+ call.onCallback(source, null);
+ }
+ }
+ }).launch();
+ }
}
--
Gitblit v1.8.0