安卓通过app之间的跳转
程序员文章站
2024-03-15 11:22:47
...
我们都知道安卓开发中经常会从当前APP跳转到另一个APP。比如支付的时候你可能从一个团购网如:大众点评,付费时跳到另一个支付APP如:支付宝。我一般都是用包名跳转,前提是你要知道你要跳转APP的包名。
通过包名直接打开APP
public static void startAPP(String packagename, Context context) {
// 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等
PackageInfo packageinfo = null;
try {
packageinfo = context.getPackageManager().getPackageInfo(packagename, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (packageinfo == null) {
DialogNotileUtil.show(context, "此程序未安装");
return;
}
// 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(packageinfo.packageName);
// 通过getPackageManager()的queryIntentActivities方法遍历
List<ResolveInfo> resolveinfoList = context.getPackageManager()
.queryIntentActivities(resolveIntent, 0);
ResolveInfo resolveinfo = resolveinfoList.iterator().next();
if (resolveinfo != null) {
// packagename = 参数packname
String packageName = resolveinfo.activityInfo.packageName;
// 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname]
String className = resolveinfo.activityInfo.name;
// LAUNCHER Intent
startAPP(packageName, className, context);
}
}
/*通过包名和类名打开APP*/
public static void startAPP(String packageName, String className, Context context) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
// 设置ComponentName参数1:packagename参数2:MainActivity路径
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
context.startActivity(intent);
}
public static void starAPP(String packagename, Context context) {
// 这里的packname就是从上面得到的目标apk的包名
Intent resolveIntent = context.getPackageManager().getLaunchIntentForPackage(packagename);
// 启动目标应用
context.startActivity(resolveIntent);
}
上面是打开APP的第二种方式,和第一种不同的是,它会新开个栈。第一种它是覆盖原APP。
上一篇: C - 计算两点间的距离
下一篇: Docker 容器之间互相访问