最近项目中有个需求,在客户端中跳转到应用市场去下载应用,
public class MarketUtils {
/**
* @param marketPackage 接口下发应用市场包名
* @param appPackage 固定要下载的应用
* */
public static boolean getAndroidBrand(Context context,JSONObject marketPackage,String appPackage){
String brand = Build.MANUFACTURER.toLowerCase();
Log.e("本机的手机品牌", "产品品牌:" + Build.BRAND.toString().toLowerCase() + "产品制造商:"+brand);
try {
if (marketPackage != null ){ //如果检测到有这个市场的包名 并且手机存在这个市场
//先要判断各大手机应用市场类似于 oppo vivo huawei 等,如果没有 再去判断
if (marketPackage.optString(brand) != null && hasPackage(context,marketPackage.optString(brand))){ //先检测各大手机应用市场 如果没有 则去检测其他助手 或者市场等
launchAppDetail(context,appPackage,marketPackage.optString(brand));
return true;
}else{
JSONArray array = marketPackage.optJSONArray("other");
if (array != null){
for (int i=0;i<array.length();i++){ //遍历这个
if (hasPackage(context,array.optString(i))){
launchAppDetail(context,appPackage,array.optString(i));
return true;
}
}
}
}
}
} catch (Exception e) {
return false;
}
return false;
}
/**
* 判断应用市场是否存在的办法
* oppo查不到应用商店
* */
public static boolean isAvilible(Context context,String packageName){
//获取packageManager
final PackageManager packageManager = context.getPackageManager();
//获取所有已安装程序的包信息
List<PackageInfo> pinfo = packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
//用于存储所有已安装程序的包名
List<String> pName = new ArrayList<>();
if (pinfo != null){
for (int i = 0; i < pinfo.size(); i++) {
String pf = pinfo.get(i).packageName;
Log.e("oppo应用市场",pinfo.get(i).packageName);
pName.add(pf);
}
}
return pName.contains(packageName);
}
/**
* 启动到应用商店app详情界面
* @param appPkg 目标App的包名
* @param marketPkg 应用商店包名 ,如果为"" 则由系统弹出应用商店
* 列表供用户选择,否则调转到目标市场的应用详情界面,某些应用商店可能会失败
*
*/
public static void launchAppDetail(Context context, String appPkg, String marketPkg) {
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();
}
}
//通过包名找应用
private static boolean hasPackage(Context context, String pkgName) {
if (null == context || null == pkgName) {
return false;
}
boolean bHas = true;
try {
context.getPackageManager().getPackageInfo(pkgName, PackageManager.GET_GIDS);
} catch (PackageManager.NameNotFoundException e) {
// 抛出找不到的异常,说明该程序已经被卸载
bHas = false;
}
return bHas;
}
}
网友评论