android.content.ActivityNotFoundException: Unable to find explicit activity class错误原因排查

android.content.ActivityNotFoundException: Unable to find explicit activity class {XXXX/XXX}; have you declared this activity in your AndroidManifest.xml?

该问题出现在我在一个应用中调用setClassName(String packageName, String className)
显式的去启动另外一个应用的activity。

  • 首先检查被启动的应用的Activity的exported属性是否为true。(当然如果两个应用有同样的User ID就不需要考虑这条,应用的User ID就是应用的包名)
<activity
    ……
    android:exported = true
    ……
/>
  • 再次,我们看看setClassName(String packageName, String className)这个API参数的含义。

    packageName:

    这个代表应用的包名,我们可以从被调应用的Manifest.xml文件中查到,也是上面提到的User ID,Android是靠User ID来识别是否是同一应用。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.tcl.cube" <!---这个就是package name->
        android:versionCode="1"
        android:versionName="1.0" >

    className:Activity的类名,以MainActivity为例,如果Activity所在的包与上述packageName一致的话,可以直接写”.MainActivity”,若不一致的话则要写上完整的包名+类型,如”com.tcl.XXX.MainActivity”

另外:由于设置Activity的exported=true,存在不安全性,随便一个应用只要知道你的包名和类名,就可以随意调用,不推荐使用,建议使用intentFilter来实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值