需求实现:已经上架的APP为第三方APP导流,实现第三方APP安装检测,已安装则跳转打开第三方APP,未安装则跳转浏览器打开下载链接
实现步骤:
1.检测应用是否安装
2.跳转其他应用
3.跳转浏览器打开下载链接
1.1 检测APP是否安装
通过获取系统上已安装的所有app列表来查找,需要获取所有已安装app信息有隐私泄露风险
public boolean isAppInstalled(Context context, String packageName){
if (context == null || packageName == null)
return false;
PackageManager pm = context.getPackageManager();
List<PackageInfo> packageInfos = pm.getInstalledPackages(0);
for (PackageInfo packageInfo : packageInfos){
if (packageInfo.packageName.equals(packageName))
return true;
}
return false;
}
通过获取特定包名的app信息来判断
public static boolean checkAPPInstalled(Context context, String pkgName) {
if (TextUtils.isEmpty(pkgName)) {
return false;
}
try {
context.getPackageManager().getPackageInfo(pkgName, 0);
} catch (Exception x) {
return false;
}
return true;
}
2.1 跳转第三方应用
public void jumpOtherAPP(Context context,String packageName){
Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
if(intent != null)
context.getApplicationContext().startActivity(intent);
}
3.1 跳转浏览器打开下载链接
public void downloadApp(Context context,JSONObject urlObj){
String downloadUrl = "";
String manufacturer = Build.MANUFACTURER;
if (manufacturer != null && manufacturer.length()>0){
String phone_type = manufacturer.toLowerCase();
switch (phone_type){
case "huawei":
downloadUrl = urlObj.optString("huawei");
break;
case "xiaomi":
downloadUrl = urlObj.optString("xiaomi");
break;
case "samsung":
downloadUrl = urlObj.optString("samsung");
break;
case "lenovo":
downloadUrl = urlObj.optString("lenovo");
break;
case "honor":
downloadUrl = urlObj.optString("honor");
break;
case "oppo":
downloadUrl = urlObj.optString("oppo");
break;
case "vivo":
downloadUrl = urlObj.optString("vivo");
break;
default:
downloadUrl = urlObj.optString("default");
break;
}
}
if(TextUtils.isEmpty(downloadUrl)) {
return;
}
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(downloadUrl));
intent.addCategory(Intent.CATEGORY_BROWSABLE);
// 注意此处的判断intent.resolveActivity()可以返回显示该Intent的Activity对应的组件名
if (intent.resolveActivity(context.getPackageManager()) != null) {
context.startActivity(Intent.createChooser(intent, "请选择浏览器"));
} else {
Toast.makeText(context.getApplicationContext(), "请下载浏览器", Toast.LENGTH_SHORT).show();
}
}