如何让一个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");

### 回答1: 可以使用 Android 的 Intent 类来启动其他应用程序。代码示例如下: ``` String packageName = "com.example.otherapp"; Intent launchIntent = getPackageManager().getLaunchIntentForPackage(packageName); startActivity(launchIntent); ``` 这段代码会启动名为 "com.example.otherapp" 的应用程序。请注意,需要在 AndroidManifest.xml 中声明对其他应用程序的访问权限。 ### 回答2: 要在一个app启动一个app,可以使用Android系统提供的隐式Intent来实现。下面是一个示例代码: ```java // 在当前app启动一个app Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.anotherapp"); if (intent != null) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } else { // 如果另一个app未安装,则做相应的处理 Toast.makeText(this, "另一个app未安装", Toast.LENGTH_SHORT).show(); } ``` 上述代码中,首先通过`getLaunchIntentForPackage()`方法获取指定包名的app启动Intent。如果找到了对应的Intent,则将`Intent.FLAG_ACTIVITY_NEW_TASK`标志添加到Intent中,然后调用`startActivity()`来启动一个app。如果另一个app未安装,则获取到的Intent为null,可以根据需要进行相应的错误处理。 需要注意的是,启动一个app需要在AndroidManifest.xml文件中声明相应的权限。在当前app的AndroidManifest.xml文件中,可以添加以下权限声明(在`<manifest>`标签下): ```xml <uses-permission android:name="android.permission.LAUNCHER_APPS"/> ``` 另外,还需要在指定被启动app的AndroidManifest.xml文件中给相应的Activity添加以下属性声明(在`<activity>`标签下): ```xml <activity android:name=".MainActivity" android:exported="true"> ... </activity> ``` 以上是一种启动一个app的方式,当然也可以根据具体需求使用其他的启动方式,如显式Intent等。 ### 回答3: 在Android开发中,可以使用Android Intent来启动一个app的代码。Android Intent是一种消息传递机制,用于在不同组件、不同应用程序之间进行通信和交互。 首先,我们需要获取另一个app的包名和启动的Activity类名。可以通过查看manifest文件或者在Android Studio的Manifest视图中获取。假设我们要启动app的包名是com.example.anotherapp启动的Activity类名是com.example.anotherapp.MainActivity。 接下来,在启动的代码中使用Intent来启动一个app。示例如下: ```java Intent intent = new Intent(); intent.setComponent(new ComponentName("com.example.anotherapp", "com.example.anotherapp.MainActivity")); startActivity(intent); ``` 上述代码中,我们创建了一个新的Intent对象,并通过setComponent方法指定了要启动app的包名和启动的Activity类名。最后调用startActivity方法启动这个Intent。 需要注意的是,启动其他app的前提是目标app已经安装在设备上,并且目标app的Activity被设置为可启动。如果目标app未安装或者目标Activity不可启动,那么启动代码将无效。 另外,还有一种情况是启动app并传递数据给目标app,可以通过Intent的putExtra方法来实现。示例如下: ```java Intent intent = new Intent(); intent.setComponent(new ComponentName("com.example.anotherapp", "com.example.anotherapp.MainActivity")); intent.putExtra("key", "value"); startActivity(intent); ``` 上述代码中,我们使用putExtra方法将数据以键值对的形式传递给目标app。在目标app的MainActivity中,可以通过getIntent方法获取传递过来的Intent,并通过getExtra方法获取传递的数据。 以上就是启动一个app的代码示例,通过Android的Intent机制,可以方便地实现跨应用程序的交互和启动
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值