Android应用A启动应用B的某个Activity

本文介绍了两种在Android应用间进行隐式启动的方法,并详细解释了常见错误及其解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天问了自己一个非常基础问题,如题,意料之外居然卡在这里了,而且还卡了不只一会会。隐式启动的方式有很多设置方法,下面记录两种非常简单的方式。

  • 使用intent.setComponent
        Intent intent = new Intent();
        ComponentName componentName = new ComponentName("com.example.lxq.app2","com.example.lxq.app2.SecondActivity");
        intent.setComponent(componentName);
        startActivity(intent);

这段代码的作用是在App A中启动App B中的SecondActivity,我在这里犯了两个错误,所以一直没能成功。

第一个错误:ComponentName构造中的两个参数,包名都是App B中的包名,而我由于直觉错误,第一个包名写成了App A中的包名。

第二个错误:App B中的SecondActivity没有指定action。

        <activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
            </intent-filter>
        </activity>

action标签一定要有,action name可以随意取值,否则会报错:Permission Denial: starting Intent。你会发现App A中启动App B的SecondActivity的时候startActivity(intent)并没有指定action,但是真真切切的启动了SecondActivity,而且APP B中的intent-filter里面没有这行代码:

<category android:name="android.intent.category.DEFAULT"/>

我也不明白怎么回事呢。

  • 使用intent.setAction
    App A中的隐式启动代码:
        Intent intent = new Intent();
        intent.setAction("lxq.example.action");
        startActivity(intent);

App B中的SecondActivity intent-fiter配置:

        <activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="lxq.example.action" />
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

这种方式一定要加上

<category android:name="android.intent.category.DEFAULT"/>

否则也是匹配不到的,记得以前在书中看到,隐式启动的时候会默认执行这样一行代码:

intent.addCategory(Intent.CATEGORY_DEFAULT)

所以,这里配置这个标签也就不稀奇了。不过第一种方式却可以不用配置,但是第一种方式必须配置action。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值