跨App启动Activity,隐式Intent启动,ActivityNotFoundException解决

来源:互联网 发布:石家庄seo顾问服务 编辑:程序博客网 时间:2024/06/06 04:58

自己开发的应用,有时候需要在应用内部调用别人的应用,使用隐式调用他人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!

0 0
原创粉丝点击