需求
公司有兩款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