版本更新-跳转到第三方应用和浏览器下载

本文介绍了一种在应用内实现版本更新的方案,包括检查更新、弹出对话框提示用户、根据不同的应用市场渠道引导用户进行更新的具体实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近有个需求, 应用的版本更新要在应用界面显示, 而不是让用户自己去应用市场查看有没有更新.

需求: 若是检查到有新版本, 则在首页弹出版本更新对话框, 若是该应用的渠道在手机上有安装, 则跳转到应用市场下载. 否则, 使用浏览器下载.

demo效果如下图:

这里写图片描述

对话框使用的是自定义的布局. 参考这里.

主要的逻辑如下:
1, 发起网络请求, 检查该版本是否有更新. 有更新则弹出对话框, 没有更新则不显示.

2, 检查该应用的发布渠道是否在手机上安装了该渠道的应用市场. (true/false)

3, true–>跳转到该应用市场的该应用的详情页下载.

4, false–>跳转到浏览器下载.


1,判断应用是否有更新, 这里就不写了.

2, 该应用使用友盟统计, 且发布到了好几个渠道的应用市场. 这里先获取该渠道是什么:

/**
 * 友盟获取当前App所属渠道, 友盟sdk中的方法
 * {@link #CHANNEL_KEY}
 * 
 * */
@NonNull
public static String getChannel(@NonNull Context context) {
    // 友盟会自动获取UMENG_CHANNEL字段
    String channel = AnalyticsConfig.getChannel(context);
    if (TextUtils.isEmpty(channel)) {
        // 友盟出了问题自己尝试获取
        channel = (String)readMetaDataFromApplication(context, CHANNEL_KEY);
        if (TextUtils.isEmpty(channel)) {
            // 自己获取不到渠道就使用默认渠道
            channel = DEFAULT_CHANNEL;
        }
    }
    return channel;
}

3, 通过应用的渠道名, 获取该应用市场的包名:

/**
 * 获取应用市场的包名
 *
 * @param channel 渠道名
 * @return 包名
 */
public String getAppStorePackageName(String channel) {
    //根据渠道名获取应用市场的包名
    if (channel.equals("给定的渠道")) {
        return "当前渠道的包名";
    }
    //...其他的渠道的比对
    //测试使用豌豆荚
    return "com.wandoujia.phoenix2";
}

4, 知道了应用市场的包名后就可以知道手机上有没有安装该应用市场:

/**
 * 检测某个应用是否安装
 *
 * @param packageName
 * @return
 */
public boolean isAppInstalled(String packageName) {
    try {
        this.getPackageManager().getPackageInfo(packageName, 0);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}

5, 应用市场安装, 跳转到该应用的详情页:

private void gotoAppInfoPage(String appStorePackageName) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri uri = Uri.parse("market://details?id=" + "com.tencent.mobileqq");//app包名,使用qq测试
    intent.setData(uri);
    intent.setPackage(appStorePackageName);
    startActivity(intent);
}

6, 应用市场未安装, 跳转到浏览器:

private void gotoBrowserDownload() {
    Intent intent = new Intent();
    intent.setAction("android.intent.action.VIEW");
    Uri content_url = Uri.parse("http://www.163.com");
    intent.setData(content_url);
    startActivity(intent);
}

7, 调用的代码:

private AlertDialog mDialog;
private void showUpdateDialog() {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    View view = View.inflate(this, R.layout.update_dialog, null);
    ((TextView) view.findViewById(R.id.title_tv)).setText("版本更新提示");
    ((TextView) view.findViewById(R.id.message_tv)).setText("版本更新内容:环境法咖啡机海鸥飞hi安徽覅节哀浩丰科技发哈及开发经费哈减肥哈欠案发后安静客服哈咖啡啊发顺丰");
    view.findViewById(R.id.not_btn).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mDialog.dismiss();
        }
    });
    view.findViewById(R.id.update_btn).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //获取渠道名,使用友盟的方法
            String channel = getChannel();
            //获取该渠道的应用市场的包名
            String appStorePackageName = getAppStorePackageName(channel);
            if (isAppInstalled(appStorePackageName)) {
                //跳转到应用市场的该版本的详情页
                gotoAppInfoPage(appStorePackageName);
            } else {
                //应用未安装,浏览器下载新版本
                gotoBrowserDownload();
            }
        }
    });
    mDialog = builder.setView(view).create();
    mDialog.show();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值