You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:45:28