美文网首页Android开发Android开发经验谈Android开发
Android根据打包渠道跳转到对应的应用市场

Android根据打包渠道跳转到对应的应用市场

作者: 工藤一号 | 来源:发表于2019-05-31 12:27 被阅读19次

    我们Android会打很多渠道包,以区分各个市场的使用情况,但是App内部升级的包一般是默认官方渠道包,这样,如果用户直接应用内升级的话,就会造成所有用户的渠道都会变成官方渠道,所以,可能会需要用到跳转到渠道对应的市场的功能。目前匹配了以下几个市场,如有需要更多的市场,可以自己获取到对应市场的包名后,按规则添加即可:

    
    
        // 跳转到应用宝的网页版地址
        private final static String WEB_YINGYONGBAO_MARKET_URL = "https://a.app.qq.com/o/simple.jsp?pkgname=com.dk.collage";
    
        private final static String MARKET_PKG_NAME_MI = "com.xiaomi.market";
        private final static String MARKET_PKG_NAME_360 = "com.qihoo.appstore";
        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_ANZHI = "cn.goapk.market";
        private final static String MARKET_PKG_NAME_HUAWEI = "com.huawei.appmarket";
        private final static String MARKET_PKG_NAME_BAIDU = "com.baidu.appsearch";
        private final static String MARKET_PKG_NAME_LIQU = "com.liqucn.android";
        private final static String MARKET_PKG_NAME_SOUGOU = "com.sougou.androidtool";
        private final static String MARKET_PKG_NAME_MEIZU = "com.meizu.mstore";
    
        /**
         * 跳转到渠道对应的市场,如果没有该市场,就跳转到应用宝(App或者网页版)
         * @param context
         */
        public void goToAppMarket(Context context) {
            try {
                Uri uri = Uri.parse("market://details?id=" + context.getApplicationContext().getPackageName());
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
                // 过去当前渠道channelName
                String channelName = CommonUtil.getCurrentChannelName();
    
                PackageManager pm = context.getPackageManager();
                List<ResolveInfo> resInfo = pm.queryIntentActivities(intent, 0);
    
                String pkgName = "";
    
                switch (channelName) {
                    case "normal":
                        pkgName = MARKET_PKG_NAME_YINGYONGBAO;
                        break;
                    case "baidu":
                        pkgName = MARKET_PKG_NAME_BAIDU;
                        break;
                    case "huawei":
                        pkgName = MARKET_PKG_NAME_HUAWEI;
                        break;
                    case "oppo":
                        pkgName = MARKET_PKG_NAME_OPPO;
                        break;
                    case "qihu360":
                        pkgName = MARKET_PKG_NAME_360;
                        break;
                    case "vivo":
                        pkgName = MARKET_PKG_NAME_VIVO;
                        break;
                    case "xiaomi":
                        pkgName = MARKET_PKG_NAME_MI;
                        break;
                    case "yingyongbao":
                        pkgName = MARKET_PKG_NAME_YINGYONGBAO;
                        break;
                    case "anzi":
                        pkgName = MARKET_PKG_NAME_ANZHI;
                        break;
                    case "liqu":
                        pkgName = MARKET_PKG_NAME_LIQU;
                        break;
                    case "sougou":
                        pkgName = MARKET_PKG_NAME_SOUGOU;
                        break;
                    case "meizu":
                        pkgName = MARKET_PKG_NAME_MEIZU;
                        break;
                    default:
                        pkgName = MARKET_PKG_NAME_YINGYONGBAO;
                        break;
                }
    
                // 给一个默认的 应用宝
                if (NullUtil.isNull(pkgName)) {
                    pkgName = MARKET_PKG_NAME_YINGYONGBAO;
                }
    
                // 筛选指定包名的市场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();
            }
        }
    

    相关文章

      网友评论

        本文标题:Android根据打包渠道跳转到对应的应用市场

        本文链接:https://www.haomeiwen.com/subject/iwewtctx.html