需求
公司有两款app需要联动,从一款app打开另一款,所以需要进行app跳转
实现
基本逻辑就是在一款app中点击打开另一款app时,在本机对于app进行查找和判断,查看本地是否存在,如果不存在跳转app下载页
如果存在就跳转到另一个app的首个activity
代码
public class PackageUtil {
/**
* 跳转其他app 跳转首个activity不需要 export
* @param context 上下文
* @param packageName 全包名
* @param className 首个activity名称
*/
public static void jumpToApp(Context context,String packageName, String className) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
context.startActivity(intent);
}
/**
* 判断app是否安装
* @param context 上下文
* @param packageName 全包名
* @return
*/
public static boolean isAppInstalled(Context context, String packageName) {
final PackageManager packageManager = context.getPackageManager();
List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);
List<String> pName = new ArrayList<String>();
if (pinfo != null) {
for (int i = 0; i < pinfo.size(); i++) {
String pn = pinfo.get(i).packageName;
pName.add(pn);
}
}
return pName.contains(packageName);
}
/**
* 打开外部浏览器下载
* @param context
* @param downloadWebUrl
*/
public static void jumpToWeb(Context context ,String downloadWebUrl) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri content_url = Uri.parse(downloadWebUrl);
intent.setData(content_url);
context.startActivity(intent);
}
}
主程序逻辑代码
if (PackageUtil.isAppInstalled(mActivity, CHONGHAO_PACKAGE_NAME)) { //app存在
//跳转app
try {
PackageUtil.jumpToApp(mActivity, "com.example.app", "com.example.app.activity.MainActivity");
// PackageUtil.jumpToApp(mActivity, CHONGHAO_PACKAGE_NAME, CHONGHAO_PACKAGE_NAME);
} catch (Exception e) {
showToast("跳转失败,请安装最新版");
PackageUtil.jumpToWeb(mActivity, "http://www.baidu.com");
}
} else {//没有安装app 去下载
PackageUtil.jumpToWeb(mActivity, "http://www.baidu.com");
}
注意
如果跳转的不是app的首个activity 需要将跳转的app暴露出来
在注册文件中添加 export属性
<activity
android:name=".activity.SecondActivity"
android:exported="true"/>
<activity