我正在处理将被困在其他人的应用程序中的代码。我有两个活动都在视频视图中播放(行为略有不同)。但是,我绝对不想依赖其他人手动声明我创建的AndroidManifest.xml活动。 (有些开发人员可能会忘记在清单中声明它)
基本上,我希望能够告诉android加载一个未在Manifest中声明的活动。我该怎么做?
这是我的想法:
1)我已经尝试了对已声明的活动进行子类化(声明的活动是指在AndroidManifest中声明的活动)。但是,调用此子类会引发ActivityNotFoundException
并不奇怪。
2)我可以通过静态方法传递静态视图,如:
public class Blah extends Activity {
private static VideoView badIdea;
public void setBadIdeaView(VideoView vv) { badIdea = vv; }
//... start it up as usual, but `badIdea` is now configured
}
但我真的不想这样做,因为一个视图保留了一个上下文,我不想要一个对Activity上下文的静态强引用。
3)有没有人知道Android如何实际加载您的活动?我猜Android使用反射来打开类的实例....但是......我的意思是,为什么必须在Manifest中声明活动?这是出于安全目的,以防止错误的动态类加载?这是一个可能的解决方案吗?
感谢
答案 0 :(得分:0)
我该怎么做?
你没有。必须在清单中声明所有活动。
但是,我绝对不想依赖其他人手动声明我创建的AndroidManifest.xml活动。
正如评论中所建议的,如果您的代码是作为Android库项目实现的,那么您可以尝试依赖清单合并。
某些开发人员可能忘记在清单中声明它
所以?他们应该在测试中抓住它。您还可以通过PackageManager
向您公开的API添加完整性检查,以便查看应用是否已注册您的活动,这样,如果您的代码不遵循您的说明,您的代码将“快速失败”。