自己开发的应用,有时候需要在应用内部调用别人的应用,使用隐式调用他人APP的主Activity入口即可
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//已知包名和启动Activity名 若只知道包名可以用
//下面的 openApp方法
ComponentName cn = new ComponentName("com.zhou","com.zhou.ZhouActivity");
intent.setComponent(cn);
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
e.printStackTrace();}
不知道入口Activity名是可以使用openApp查找
private void openApp(String packageName){
PackageManager pm = this.getPackageManager();
try {
PackageInfo pi = pm.getPackageInfo(packageName, 0);
Intent a = new Intent(Intent.ACTION_MAIN,null);
a.addCategory(Intent.CATEGORY_LAUNCHER);
a.setPackage(pi.packageName);
List<ResolveInfo> list = pm.queryIntentActivities(a, 0);
ResolveInfo info = list.iterator().next();
if(info !=null){
String packagename = info.activityInfo.packageName;
String classname = info.activityInfo.name;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ComponentName cn = new ComponentName(packagename, classname);
intent.setComponent(cn);
startActivity(intent);
}
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
如果启动的不是APP入口的Activity,而是指定的某个Activity
则需在跳转过去的Activity,即目标Activity添加过滤器
<activity
android:name="com.zhou.LocalOtherActivity">
<intent-filter>
<action android:name="other" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
对应启动Intent
Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setAction("other");//和你过滤器设置的值一致
ComponentName("com.zhou", "com.zhou.LocalOtherActivity");
intent.setComponent(cn);
startActivity(intent);
如果出现 ActivityNotFoundException 请检查package 是否为你目标APP的Package,即目标APP的manifest中的package!