适当的方式转移到另一个活动? Android Manifest问题

时间:2012-08-14 23:40:47

标签: android android-intent android-manifest android-activity

我正在查看一些lint错误,并注意到有两种方法可以转换活动。

根据我从各种互联网资源中学到的知识,我一直在为我的清单中的每个活动分配一个带有操作名称的intent-filter,然后调用它来进行该活动。

然而,这给了我:“导出的活动不需要许可”lint错误。有人说这可能是一个奇怪的问题,最好通过引用活动类去(使用startActivity()方法)。通过调用活动的类而不是意图过滤器。

谁能证明哪种方式更好?然而,似乎没有提示皮棉错误的方式会更好......

谢谢!

2 个答案:

答案 0 :(得分:3)

建议的方法是Activity不应在清单中注册<intent-filter>部分,除非外部应用程序使用它。这方面的一个例子是使用诸如Intent动作ACTION_VIEW之类的东西来查看特定文档的mime类型。这基本上是一个隐含的Intent动作。

如果您的Activity类只是由您自己的应用程序组件在内部使用,那么它们应该仅使用expiclit Intents启动,例如......

Intent myIntent = new Intent(this, MyActivity.class);

在这种情况下,启动Activity'的应用组件会知道它想要做什么,并启动一个特定的Activity来执行此操作。

答案 1 :(得分:0)

另一种方法是使用BroadcastReceiver来处理意图。它将反过来开始你的活动。从广播接收器做一个startActivity()。因此,您使用广播接收器上的过滤器获取意图,但广播接收器将使用startActivity启动相应的活动。所以在这种情况下它实际上是一个组合,但要求你广播意图而不是通过类名来定位它。如果您的应用很简单,您可以从其他活动中启动活动(意图)。但是不要在Activity上注册过滤器。我知道这个答案不是人群最喜欢的,但它被称为松散耦合,或关注点或其他东西。