Android应用更新(一)

在开发App后期,一个肯定绕不过去功能:应用更新。无非就两种形式:

(1)服务端维护更新包,app后台下载最新包并安装;

(2)app上架各应用市场后,服务端只提供一个接口告知app当前最新app的版本号,更新信息等。app拉起本地应用市场或者是通过浏览器打开指定更新链接;

方式一应该是比较主流的方式,对于App和服务端相对来说都要麻烦一些,但是好处是用户体验更好。方式二则更加的省事。

本博客将介绍方式二如何实现,方式一将在以后的文章中介绍。

方式二更新的思路:

(1)遍历当前手机所有已安装包,获取所有应用包名;

(2)与主流应用市场的包名进行比对;

(3)如果有,则拉起应用市场App,跳转到对应app更新页面;如果没有,则拉起手机浏览器,跳转到指定app更新链接。

功能也比较简单,这里直接贴代码吧,LaunchAppStore.java:

public class LaunchAppStore {
    /**
     * 主流应用商店对应的包名
     * com.android.vending	-----Google Play
     * com.tencent.android.qqdownloader 	-----应用宝
     * com.qihoo.appstore	-----360手机助手
     * com.baidu.appsearch	-----百度手机助
     * com.xiaomi.market	-----小米应用商店
     * com.wandoujia.phoenix2	-----豌豆荚
     * com.huawei.appmarket	-----华为应用市场
     * com.taobao.appcenter	-----淘宝手机助手
     * com.hiapk.marketpho	-----安卓市场
     * cn.goapk.market	    -----安智市场
     */
    private static final String[] storePackageNames = {
        "com.android.vending",
        "com.tencent.android.qqdownloader",
        "com.qihoo.appstore",
        "com.baidu.appsearch",
        "com.xiaomi.market",
        "com.wandoujia.phoenix2",
        "com.huawei.appmarket",
        "com.taobao.appcenter",
        "com.hiapk.marketpho",
        "cn.goapk.market"
    };

    /**
     * @param context 上下文
     * @return 当前手机安装的应用市场包名,如果没有则为空字符串
     */
    public static String isAvailableToStore(Context context) {
        final PackageManager packageManager = context.getPackageManager();
        List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0);
        List<String> installedPackageNames = new ArrayList<>();
        for (PackageInfo packageInfo : packageInfos) {
            installedPackageNames.add(packageInfo.packageName);
        }
        String targetStorePackageName = "";
        for (int i = 0; i < storePackageNames.length; i++) {
            if (installedPackageNames.contains(storePackageNames[i])) {
                targetStorePackageName = storePackageNames[i];
                break;
            }
        }

        return targetStorePackageName;
    }

    /**
     * 拉起应用市场或者是打开浏览器访问
     * @param context 上下文
     * @param targetStorePackageName 目标应用市场包名
     * @param updateLink google pay应用市场更新链接
     */
    public static void launchStoreWithCurrentApp(Context context, String targetStorePackageName, String updateLink) {
        String appPackageName = context.getPackageName();

        if (!targetStorePackageName.equals("")) {
            Uri uri = Uri.parse("market://details?id=" + appPackageName);
            Intent launchStoreIntent = new Intent(Intent.ACTION_VIEW, uri);
            launchStoreIntent.setPackage(targetStorePackageName);
            launchStoreIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(launchStoreIntent);
        } else {
            Uri uri = Uri.parse(updateLink);
            Intent launchBrowserIntent = new Intent(Intent.ACTION_VIEW, uri);
            launchBrowserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(launchBrowserIntent);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值