在Android中如何指定哪个活动应该处理我的意图

时间:2012-03-07 04:37:34

标签: android android-intent

我有2个应用A and B.

我想从B开始A的活动。所以我使用隐含意图。有没有办法确保只有B中的活动被意图调用?

即如果黑客将他的应用程序放在试图接收相同意图的设备上,我想阻止它。

4 个答案:

答案 0 :(得分:2)

使用setPackage方法指定whicj app应该处理意图。以下是使用ZXing的示例:

final String ZXING = "com.google.zxing.client.android";
Intent intent = new Intent(ZXING + ".SCAN");
intent.setPackage(ZXING);

答案 1 :(得分:2)

documentionandroid:exported=false

android:exported
是否可以通过其他应用程序的组件启动活动 - " true"如果它可以,并且"假"如果不。如果" false",则活动只能由相同应用程序的组件或具有相同用户ID的应用程序启动。 默认值取决于活动是否包含意图过滤器。缺少任何过滤器意味着只能通过指定其确切的类名来调用活动。这意味着该活动仅供应用程序内部使用(因为其他人不知道类名)。所以在这种情况下,默认值为" false"。另一方面,至少有一个过滤器的存在意味着该活动旨在供外部使用,因此默认值为" true"。 此属性不是限制活动与其他应用程序相关的唯一方法。您还可以使用权限来限制可以调用活动的外部实体(请参阅权限属性)。

所以,在活动B中使用android:exported=false并在Activty中使用IntentSender来获取Intent的信息意味着哪个组件想要启动您的Activty B

答案 2 :(得分:0)

如果使用显式意图,则仅调用intent中指定的活动。

如果存在隐含意图,您可以添加数据,操作,类别,以限制组件过滤以仅定位您的活动。

答案 3 :(得分:0)

您可以使用简单的公钥/私钥加密来加密意图中发送的任何数据。一种常见的方法是使用PGP加密,并确保有一个与Android兼容的库。

这可以确保任何黑客都无法窃取通过意图发送的数据,只要他们没有私钥。

话虽如此,处理私钥可能会很棘手,因为好的黑客可能会对您的应用程序进行去混淆/解编译并抓住您的密钥。因此,您可能需要将所述密钥保存在中央服务器上。