从我的Package A类中,我尝试在Package B中启动Activity。
当我尝试这种方式时,它运作正常:
new Intent(getApplicationContext(), ClassB.class);
但是,当尝试通过这种方式创建Intent
时:
ComponentName componentName = ComponentName.unflattenFromString("com.example.package/.ClassB");
它会出错:**android.content.ActivityNotFoundException:** Unable to find explicit activity class {};
您是否已在AndroidManifest.xml
中声明了此活动?我的问题是需要通过ComponentName
将其称为第二种方式。
虽然我已经提到了这个问题的所有相关循环,但没有找到解决方案。我也在下面的清单中声明好了(否则我想它不会通过第一种方法调用):
<activity android:name="com.example.package.ClassB"
android:exported="true"
android:excludeFromRecents="true" />
请检查是否可以提供帮助?这两个包都是同一个App的一部分。
答案 0 :(得分:0)
如果您在问题中写的所有内容都是正确的,那么您应用的应用ID就不是com.example.package
。所以,改变:
ComponentName componentName = ComponentName.unflattenFromString("com.example.package/.ClassB");
为:
ComponentName componentName = ComponentName.unflattenFromString("xxx/com.example.package.ClassB");
其中xxx
是您应用的应用ID。特别是,组件名称的右侧应该是清单中android:name
的{{1}}值,左侧应该是应用程序的应用程序ID。您始终可以在活动上调用<activity>
来查找其getComponentName()
(例如,登录LogCat以查看其外观)。
然后,重新考虑做这些事情。当你写下你只需要通过ComponentName&#34;第二种方式调用它时,我想不出任何需要ComponentName
的情况。
例如,假设您要将ComponentName
的字符串表示保存在文件中。这是有风险的,因为这意味着您永远无法重构您的应用,否则您保存的ComponentName
值将无效。相反,在表示逻辑活动的文件中保存一些内容,并将应用程序代码映射到正确的Java类,以便在显式ComponentName
中使用。