本文主要记录:
使用 Intent 打开第三方应用或指定 Activity 的三种方式
使用上面三种方式时分别如何判断该 Intent 能否被解析
判断该 Intent 能否被解析中可能出现的遗漏
基础知识
1. App 的入口 Activity 与其 icon
一个普通的应用默认会有一个入口 Activity,它在 AndroidManifest.xml 中一般这样写:
...
只有配置了一个这样的 Activity,这个应用才会点击的时候知道启动哪个 Activity,如果把 category 的值修改为 android.intent.category.DEFAULT 那么,这个应用将在桌面看不到 icon,无法直接打开了。
使用 Intent 打开第三方应用或指定 Activity 的方式
只知道包名 - 需要有默认的入口 Activity
启动指定第三方应用的 Activity - 需要包名和 Activity 名,且该 Activity 的 Export=“true”
隐式启动第三方应用
1. 使用 PackageManager.getLaunchIntentForPackage()
String package_name="xx.xx.xx";
PackageManager packageManager = context.getPackageManager();
Intent it = packageManager.getLaunchIntentForPackage(package_name);
startActivity(it);
该方法针对只知道包名,想要启动该应用时使用,对该应用的***限制是 有默认的入口 Activity 。
当没有默认的入口 Activity 时,会报 NullPointerException 异常:
java.lang.NullPointerException: Attempttoinvoke virtual method'java.lang.String android.content.Intent.toString()'onanullobject reference
再看看 getLaunchIntentForPackage() 方法的说明:
/**
* Returnsa"good"intenttolaunch a front-door activityina package.
* This isused,forexample,toimplement an"open"buttonwhenbrowsing
* thro