应用内更新,直接跳转到对应手机应用市场

 

应用内更新

这篇文章已经写了成熟的方案

https://juejin.im/post/6882191830700523527

应用内提示

进入到首页以后,我们去请求服务器的关于App的接口,请求到App的在商店的版本号,如果商店版本号 >当前App的版本号,那么就提示用户,用户点击确定以后,然后跳转到对应的商店去更新。

有什么优点

减少了用户更新App的成本,增加了用户更新App的几率。

方案实施

思路

1、首先判断用户的品牌型号,比如华为。

2、根据设备品牌去跳转不同的应用商店,比如华为就去跳转华为的应用市场。

代码实现

package com.example.jumpmarket;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;

import androidx.appcompat.app.AppCompatActivity;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    // 跳转到应用宝的网页版地址
    private final static String WEB_YINGYONGBAO_MARKET_URL = "http://zhushou.360.cn/detail/index/soft_id/839306?recrefer=SE_D_%E6%B5%B7%E5%BA%95%E6%8D%9E";

    private final static String MARKET_PKG_NAME_MI = "com.xiaomi.market";
    private final static String MARKET_PKG_NAME_VIVO = "com.bbk.appstore";
    private final static String MARKET_PKG_NAME_OPPO = "com.oppo.market";
    private final static String MARKET_PKG_NAME_YINGYONGBAO = "com.tencent.android.qqdownloader";
    private final static String MARKET_PKG_NAME_HUAWEI = "com.huawei.appmarket";
    private final static String MARKET_PKG_NAME_MEIZU = "com.meizu.mstore";
    private static final String TAG = MainActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                goToAppMarket(MainActivity.this);
            }
        });
    }

    /**
     * 跳转到渠道对应的市场,如果没有该市场,就跳转到应用宝(App或者网页版)
     * @param context
     */
    public void goToAppMarket(Context context) {
        try {
            // 通过设备品牌获取包名
            String pkgName = "";
            String deviceBrand = SystemUtil.getDeviceBrand().toUpperCase();
            if ("HUAWEI".equals(deviceBrand) || "HONOR".equals(deviceBrand)) {
                pkgName = MARKET_PKG_NAME_HUAWEI;
            } else if ("OPPO".equals(deviceBrand)) {
                pkgName = MARKET_PKG_NAME_OPPO;
            } else if ("VIVO".equals(deviceBrand)) {
                pkgName = MARKET_PKG_NAME_VIVO;
            } else if ("XIAOMI".equals(deviceBrand) || "REDMI".equals(deviceBrand)) {
                pkgName = MARKET_PKG_NAME_MI;
            } else if ("MEIZU".equals(deviceBrand)) {
                pkgName = MARKET_PKG_NAME_MEIZU;
            } else {
                pkgName = MARKET_PKG_NAME_YINGYONGBAO;
            }

            //查询符合条件的页面
            Uri uri = Uri.parse("market://details?id=" + "com.haidilao");
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            PackageManager pm = context.getPackageManager();
            List resInfo = pm.queryIntentActivities(intent, 0);

            // 筛选指定包名的市场intent
            if (resInfo.size() > 0) {
                for (int i = 0; i < resInfo.size(); i++) {
                    ResolveInfo resolveInfo = resInfo.get(i);
                    String packageName = resolveInfo.activityInfo.packageName;
                    if (packageName.toLowerCase().equals(pkgName)) {
                        Intent intentFilterItem = new Intent(Intent.ACTION_VIEW, uri);
                        intentFilterItem.setComponent(new ComponentName(packageName, resolveInfo.activityInfo.name));
                        context.startActivity(intentFilterItem);
                        return;
                    }
                }
            }
            //不满足条件,那么跳转到网页版
            goToYingYongBaoWeb(context);
        } catch (Exception e) {
            e.printStackTrace();
            // 发生异常,跳转到应用宝网页版
            goToYingYongBaoWeb(context);
        }
    }

    /**
     * 跳转到应用宝网页版
     */
    public void goToYingYongBaoWeb(Context context) {
        try {
            Uri uri = Uri.parse(WEB_YINGYONGBAO_MARKET_URL);
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

package com.example.jumpmarket;

import android.app.Activity;
import android.content.Context;
import android.telephony.TelephonyManager;

import java.util.Locale;

public class SystemUtil {

    /**
     * 获取当前手机系统语言。
     *
     * @return 返回当前系统语言。例如:当前设置的是“中文-中国”,则返回“zh-CN”
     */
    public static String getSystemLanguage() {
        return Locale.getDefault().getLanguage();
    }

    /**
     * 获取当前系统上的语言列表(Locale列表)
     *
     * @return  语言列表
     */
    public static Locale[] getSystemLanguageList() {
        return Locale.getAvailableLocales();
    }

    /**
     * 获取当前手机系统版本号
     *
     * @return  系统版本号
     */
    public static String getSystemVersion() {
        return android.os.Build.VERSION.RELEASE;
    }

    /**
     * 获取手机型号
     *
     * @return  手机型号
     */
    public static String getSystemModel() {
        return android.os.Build.MODEL;
    }

    /**
     * 获取手机厂商
     *
     * @return  手机厂商
     */
    public static String getDeviceBrand() {
        return android.os.Build.BRAND;
    }

    /**
     * 获取手机IMEI(需要“android.permission.READ_PHONE_STATE”权限)
     *
     * @return  手机IMEI
     */
    public static String getIMEI(Context ctx) {
        TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Activity.TELEPHONY_SERVICE);
        if (tm != null) {
            return tm.getDeviceId();
        }
        return null;
    }
}


转载链接:https://juejin.im/post/6884087195917893646/
 

你可能感兴趣的:(应用内更新,直接跳转到对应手机应用市场)