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来识别是否是同一应用。

    
    <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来实现。

你可能感兴趣的:(Android应用)