0

我正在处理将卡在其他人的应用程序中的代码。我有两个活动都播放视频视图(行为略有不同)。但是,我绝对不想依赖其他人手动声明我创建的 AndroidManifest.xml 活动。(一些开发人员可能只是忘记在他们的清单中声明它)

所以本质上,我希望能够告诉 android 加载一个未在 Manifest 中声明的活动。我该怎么做呢?

这是我的想法:

1)我尝试子类化声明的活动(声明的活动指的是它在AndroidManifest中声明)。然而,调用这个子类会引发 aActivityNotFoundException并不奇怪。

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
}

但我真的不想这样做,因为视图会保留上下文,并且我不想要对活动上下文的静态强引用。

3) 有人知道 Android 是如何实际加载您的活动的吗?我猜Android使用反射来打开类的实例......但是......我的意思是,为什么必须在Manifest中声明活动?这是出于安全目的,以防止不良的动态类加载吗?这是一个可能的解决方案吗?

谢谢

4

1 回答 1

0

我该怎么做呢?

你没有。所有活动都必须在清单中声明。

但是,我绝对不想依赖其他人必须手动声明我创建的 AndroidManifest.xml 活动。

正如评论中所建议的,如果您的代码被实现为 Android 库项目,您可以尝试依赖清单合并。

一些开发人员可能只是忘记在他们的清单中声明它

所以?他们应该在测试中抓住它。您还可以向您公开的 API 添加完整性检查,您可以在其中查看应用程序是否注册了您的活动,通过PackageManager,这样如果您的代码没有按照您的说明进行操作,您的代码将“快速失败”。

于 2013-11-11T19:19:51.853 回答