Android Java中appUpdateManager.startUpdateFlowForResult弃用及TIF显示问题
Android开发两个问题的解决方案
一、应用内更新startUpdateFlowForResult弃用后的Java替代实现
startUpdateFlowForResult已被弃用,官方推荐使用Activity Result API替代,无需直接传递Activity参数,以下是完整Java代码示例:
步骤1:注册ActivityResultLauncher
import com.google.android.play.core.appupdate.AppUpdateContract; import com.google.android.play.core.appupdate.AppUpdateInfo; import com.google.android.play.core.appupdate.AppUpdateManager; import com.google.android.play.core.appupdate.AppUpdateManagerFactory; import com.google.android.play.core.install.model.AppUpdateType; import com.google.android.play.core.install.model.UpdateAvailability; import androidx.activity.result.ActivityResultLauncher; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private ActivityResultLauncher<AppUpdateInfo> appUpdateLauncher; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化更新结果 launcher appUpdateLauncher = registerForActivityResult(new AppUpdateContract(), result -> { // 处理更新结果:result为更新操作的返回码 if (result != RESULT_OK) { // 更新失败或用户取消,可添加重试逻辑或提示 } }); // 启动更新检查 checkAndStartAppUpdate(); }
步骤2:检查更新并启动流程
private void checkAndStartAppUpdate() { AppUpdateManager appUpdateManager = AppUpdateManagerFactory.create(this); appUpdateManager.getAppUpdateInfo().addOnSuccessListener(appUpdateInfo -> { // 检查是否有可用更新,且支持立即更新类型 if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) { // 启动更新流程 appUpdateLauncher.launch(appUpdateInfo); } }); } }
说明:此方式完全替代弃用方法,通过AppUpdateContract和ActivityResultLauncher处理更新回调,无需传递Activity实例,解决参数报错问题。
二、Java实现TIF图片显示(基于Beyka/Android-TiffBitmapFactory库)
1. 添加依赖
在模块级build.gradle中添加依赖:
dependencies { implementation 'com.github.beyka:android-tiffbitmapfactory:0.9.14' }
2. 加载TIF图片的Java示例
从本地文件加载
import android.graphics.Bitmap; import android.widget.ImageView; import com.beyka.tiffbitmapfactory.TiffBitmapFactory; public class TiffImageLoader { // 加载本地TIF文件到ImageView public static void loadLocalTiff(String filePath, ImageView imageView) { TiffBitmapFactory.Options options = new TiffBitmapFactory.Options(); options.inSampleSize = 2; // 设置采样率,降低图片分辨率减少内存占用 options.inJustDecodeBounds = false; // 开启实际解码(非仅获取尺寸) Bitmap tiffBitmap = TiffBitmapFactory.decodeFile(filePath, options); if (tiffBitmap != null) { imageView.setImageBitmap(tiffBitmap); } else { // 加载失败,显示占位图或提示 imageView.setImageResource(R.drawable.ic_load_fail); } }
从Assets目录加载
// 加载Assets中的TIF文件 public static void loadAssetsTiff(ImageView imageView, AppCompatActivity activity) { try { TiffBitmapFactory.Options options = new TiffBitmapFactory.Options(); options.inSampleSize = 1; // 不缩放,加载原尺寸 Bitmap tiffBitmap = TiffBitmapFactory.decodeStream( activity.getAssets().open("sample.tif"), null, options ); imageView.setImageBitmap(tiffBitmap); } catch (IOException e) { e.printStackTrace(); imageView.setImageResource(R.drawable.ic_load_fail); } } }
说明:该库用法与Android原生BitmapFactory高度一致,支持多页TIF解码(可通过options.inPage指定页码),通过inSampleSize可有效避免内存溢出。
内容的提问来源于stack exchange,提问作者user4450672
相关产品推荐
相关产品推荐

