Android apk通过intent调用另一个apk

前言

在android中,A apk通过包名(pkg name)和类名(cls name)调用B apk的某个activity,但在实际调用过程中,A apk中调用startActivity时报了如下错误:
android.content.ActivityNotFoundException: Unable to find explicit activity class {[pkg name]/[cls name]}; have you declared this activity in your AndroidManifest.xml?
有可能是调用参数写错了。

方法

对于被调用的B apk:
需要在android manifest中声明你的activity名称,当然这一步是必做的,因为你不声明的话在B apk内部你也进不去这个activity。此外,需要对被调用的activity设置为导出,也就是这句android:exported="true"。例如:

<manifest
    package="com.company.default">
    <application
        ...
        <activity
            android:name=".DemoActivity"
            android:exported="true" />
        <activity
        ...
    </application>
</manifest>

对于调用者的A apk:
用正确的pkg name和cls name创建一个intent,并通过startActivity()方法启动B apk中的activity即可。例如:

Intent intent = new Intent();
intent.setClassName("com.company.default", "com.company.default.DemoActivity");
startActivity(intent);

这里要注意,pkg name就是我们在android manifest中声明的package名称。cls name是包含包名和文件夹路径名称的完整的类名,例如包名为com.company.default,而在包名路径下,又创建了example文件夹,DemoActivity在example文件夹下,那么cls name为com.company.default.example.DemoActivity,如果只写了"DemoActivity",就会出现文章开头提示的ActivityNotFoundException。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容