修复系统分享图片的接收功能。

This commit is contained in:
2025-12-21 13:38:46 +08:00
parent c8333e1e81
commit 20e3a5f974
2 changed files with 15 additions and 77 deletions

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Sun Dec 21 11:22:23 HKT 2025 #Sun Dec 21 05:35:44 GMT 2025
stageCount=15 stageCount=15
libraryProject= libraryProject=
baseVersion=15.14 baseVersion=15.14
publishVersion=15.14.14 publishVersion=15.14.14
buildCount=0 buildCount=6
baseBetaVersion=15.14.15 baseBetaVersion=15.14.15

View File

@@ -6,7 +6,6 @@ import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
@@ -24,10 +23,10 @@ import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider; import androidx.core.content.FileProvider;
import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.ToastUtils; import cc.winboll.studio.libappbase.ToastUtils;
import cc.winboll.studio.powerbell.App;
import cc.winboll.studio.powerbell.R; import cc.winboll.studio.powerbell.R;
import cc.winboll.studio.powerbell.dialogs.BackgroundPicturePreviewDialog; import cc.winboll.studio.powerbell.dialogs.BackgroundPicturePreviewDialog;
import cc.winboll.studio.powerbell.dialogs.ColorPaletteDialog; import cc.winboll.studio.powerbell.dialogs.ColorPaletteDialog;
import cc.winboll.studio.powerbell.dialogs.NetworkBackgroundDialog;
import cc.winboll.studio.powerbell.dialogs.YesNoAlertDialog; import cc.winboll.studio.powerbell.dialogs.YesNoAlertDialog;
import cc.winboll.studio.powerbell.models.BackgroundBean; import cc.winboll.studio.powerbell.models.BackgroundBean;
import cc.winboll.studio.powerbell.utils.BackgroundSourceUtils; import cc.winboll.studio.powerbell.utils.BackgroundSourceUtils;
@@ -37,8 +36,6 @@ import cc.winboll.studio.powerbell.utils.ImageCropUtils;
import cc.winboll.studio.powerbell.utils.UriUtils; import cc.winboll.studio.powerbell.utils.UriUtils;
import cc.winboll.studio.powerbell.views.BackgroundView; import cc.winboll.studio.powerbell.views.BackgroundView;
import java.io.File; import java.io.File;
import java.io.IOException;
import cc.winboll.studio.powerbell.dialogs.NetworkBackgroundDialog;
public class BackgroundSettingsActivity extends WinBoLLActivity { public class BackgroundSettingsActivity extends WinBoLLActivity {
@@ -432,64 +429,6 @@ public class BackgroundSettingsActivity extends WinBoLLActivity {
}, 200); }, 200);
} }
/**
* 解析裁剪临时文件为 Bitmap带采样率优化
* @param cropTempFile 裁剪临时文件
* @return 解析后的Bitmap失败返回null
*/
private Bitmap parseCropTempFileToBitmap(File cropTempFile) {
LogUtils.d(TAG, "【工具方法】解析裁剪文件:" + (cropTempFile != null ? cropTempFile.getAbsolutePath() : "null"));
if (cropTempFile == null || !cropTempFile.exists() || !cropTempFile.isFile() || cropTempFile.length() <= 100) {
LogUtils.e(TAG, "【Bitmap解析】文件无效");
return null;
}
// 计算采样率
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(cropTempFile.getAbsolutePath(), options);
int sampleSize = calculateSampleSize(options.outWidth, options.outHeight);
LogUtils.d(TAG, "【Bitmap解析】采样率" + sampleSize);
// 解析Bitmap
options.inJustDecodeBounds = false;
options.inSampleSize = sampleSize;
options.inPreferredConfig = Bitmap.Config.RGB_565;
options.inPurgeable = true;
options.inInputShareable = true;
try {
Bitmap cropBitmap = BitmapFactory.decodeFile(cropTempFile.getAbsolutePath(), options);
if (!isBitmapValid(cropBitmap)) {
LogUtils.e(TAG, "【Bitmap解析】解析失败");
return null;
}
LogUtils.d(TAG, "【Bitmap解析】成功尺寸" + cropBitmap.getWidth() + "x" + cropBitmap.getHeight());
return cropBitmap;
} catch (OutOfMemoryError e) {
LogUtils.e(TAG, "【Bitmap解析】OOM异常");
return null;
} catch (Exception e) {
LogUtils.e(TAG, "【Bitmap解析】异常" + e.getMessage());
return null;
}
}
/**
* 计算Bitmap采样率
* @param width 图片宽度
* @param height 图片高度
* @return 采样率
*/
private int calculateSampleSize(int width, int height) {
int sampleSize = 1;
while (width / sampleSize > BITMAP_MAX_SIZE || height / sampleSize > BITMAP_MAX_SIZE) {
sampleSize *= 2;
}
return Math.min(sampleSize, BITMAP_MAX_SAMPLE_SIZE);
}
// ====================== 业务逻辑方法(按功能分类)====================== // ====================== 业务逻辑方法(按功能分类)======================
/** /**
* 初始化核心组件(工具类+视图) * 初始化核心组件(工具类+视图)
@@ -550,11 +489,13 @@ public class BackgroundSettingsActivity extends WinBoLLActivity {
* 显示分享图片预览对话框 * 显示分享图片预览对话框
*/ */
private void showSharePreviewDialog() { private void showSharePreviewDialog() {
LogUtils.d(TAG, "showSharePreviewDialog()");
BackgroundPicturePreviewDialog dlg = new BackgroundPicturePreviewDialog(this, new BackgroundPicturePreviewDialog.IOnRecivedPictureListener() { BackgroundPicturePreviewDialog dlg = new BackgroundPicturePreviewDialog(this, new BackgroundPicturePreviewDialog.IOnRecivedPictureListener() {
@Override @Override
public void onAcceptRecivedPicture(Uri uriRecivedPicture) { public void onAcceptRecivedPicture(Uri uriRecivedPicture) {
ToastUtils.show("已接收图片:" + uriRecivedPicture); if (putUriFileToPreviewSource(uriRecivedPicture)) {
LogUtils.d(TAG, "【分享处理】接收图片Uri" + uriRecivedPicture); startImageCrop(false);
}
} }
}); });
dlg.show(); dlg.show();
@@ -571,11 +512,8 @@ public class BackgroundSettingsActivity extends WinBoLLActivity {
return false; return false;
} }
String lowerMimeType = mimeType.toLowerCase(); String lowerMimeType = mimeType.toLowerCase();
return lowerMimeType.equals("image/jpeg") LogUtils.d("isImageType", "mimeType: " + mimeType + ", lowerMimeType: " + lowerMimeType);
|| lowerMimeType.equals("image/png") return lowerMimeType.startsWith("image/");
|| lowerMimeType.equals("image/tiff")
|| lowerMimeType.equals("image/jpg")
|| lowerMimeType.equals("image/svg+xml");
} }
/** /**