admin管理员组

文章数量:1560439

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

// 跳转到应用宝的网页版地址

private final static String WEB_YINGYONGBAO_MARKET_URL = "https://a.app.qq/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 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();

}

}

本文标签: 跳转跳转到渠道市场中心