如何让一个APP启动另一个APP

参考网上的一篇文章(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. Returns null 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");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值