最近项目有个应用内部提示升级的需求,简单,核对版本号,版本号低了就给提示升级,但是还有个问题,点击升级跳转的问题,一般我们点击升级会跳到应用官网;我们的需求是点击升级的时候,根据当前app下载的渠道跳转到不同的渠道商店应用详情页或渠道的网页商店详情页,花了一些时间研究了下,也不是太难,这里权当记录了。
主要工作:
1、判断当前app的渠道号
2、获取当前手机包含的应用商店
3、如果存在对应的渠道商店,跳转到渠道商店;如果不存在对应的渠道商店,跳转到渠道商店的网页版
判断当前app的渠道号
int channelCode = BuildConfig.CHANNEL_CODE获取当前手机包含的应用商店
/** * 获取当前手机上的应用商店数量
* @param context
* @return
*/
private static ArrayList<String> queryInstalledMarketPkgs(Context
context) {
ArrayList<String> pkgs = new ArrayList<>();
if (context == null)
return pkgs;
Intent intent = new Intent();
intent.setAction("android.intent.action.MAIN");
intent.addCategory("android.intent.category.APP_MARKET");
PackageManager pm = context.getPackageManager();
List<ResolveInfo> infos = pm.queryIntentActivities(intent, 0);
if (infos == null || infos.size() == 0)
return pkgs;
int size = infos.size();
for (int i = 0; i < size; i++) {
String pkgName = "";
try {
ActivityInfo activityInfo = infos.get(i).activityInfo;
pkgName = activityInfo.packageName;
} catch (Exception e) {
e.printStackTrace();
}
if (!TextUtils.isEmpty(pkgName))
pkgs.add(pkgName);
}
return pkgs;
}应用商店跳转
/** *
* @param appPkg 应用包名
* @param marketPkg 应用商店包名
* @param context
*/
private static void launchAppDetail(String appPkg, String marketPkg,
Context context) {
try {
if (TextUtils.isEmpty(appPkg))
return;
Uri uri = Uri.parse("market://details?id=" + appPkg);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
if (!TextUtils.isEmpty(marketPkg))
intent.setPackage(marketPkg);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}应用商店网页版跳转
Uri uri = Uri.parse("应用商店app网页版地址");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
context.startActivity(intent);根据渠道号和手机上包含的应用商店决定跳应用商店或者跳应用商店网页版
一切就绪!