参考网上的一篇文章(http://www.2cto.com/kf/201409/332952.html),尝试后程序报错。
报错原因是:调用getLaunchIntentForPackage("包名")后,返回了null。
在网上查了一下这个错误,有人遇到(http://blog.csdn.net/xiaodongvtion/article/details/6955066),但是情况跟我的情况不一样——这篇文章遇到的问题是由于”该包没有main activity“。
我遇到的问题原因是这样的:(下面用A表示调用方,B表示被调用方)
由于B不需要被用户看到,因此我最初是这么设置B的主activity的(注意红色部分)
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
之后查了Adroid关于getLaunchIntentForPackage的介绍(原文地址http://developer.android.com/reference/android/content/pm/PackageManager.html#getLaunchIntentForPackage(java.lang.String)):
Returns a "good" intent to launch a front-door activity in a package. This is used, for example, to implement an "open" button when browsing through packages. The current implementation looks first for a main activity in the category CATEGORY_INFO
, and next for a main activity in the category CATEGORY_LAUNCHER
. Returnsnull
if neither are found.
Parameters
packageName | The name of the package to inspect. |
---|
Returns
- A fully-qualified
Intent
that can be used to launch the main activity in the package. Returnsnull
if the package does not contain such an activity, or ifpackageName is not recognized.
大致意思是,如果要启动的activity的category值没有设置
大致意思是,如果要启动的activity的category值没有设置为CATEGORY_INFO(即"android.intent.category.INFO"或CATEGORY_LAUNCHER(即”android.intent.category.LAUNCHER“),就会返回空值。
修改B的主activity配置l如下:(只改了红色部分)
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.INFO" />
</intent-filter>
</activity>
然后 getLaunchIntentForPackage("包名")返回的intent就可以正常使用了。另一种方法:
不用getLaunchIntentForPackage("包名")获得intent,直接new一个intent并对其赋值,代码如下:
Intent intent = new Intent();
intent.setPackage("com.example.subapp");
intent.setAction("android.intent.action.MAIN");