2013-07-12 121 views
0

我想在导出的活动中实现细粒度保护机制。权限框架似乎不适合我的要求。Android:从活动获取调用应用程序的信息

有我正在考虑两个方案:

  • 使用Activity.getCallingPackage - 只有当活动开始startActivityForResult工作 - 这是我想尽可能避免的限制。
  • 使用Binder.getCallingUid - 在Activity中调用时,它返回本地UID,而不是调用UID。

是否有任何方法允许startActivity启动的活动检索有关调用应用程序的任何信息?

回答

0

您可以添加额外的信息在您的意图。

Intent i = new Intent(this, NextClass.class); 
i.putExtra("extra", "This is some extra information"; 
startActivity(i); 

您从NextClass通过检索数据:

Intent i = getIntent(); 
String extraStuff = i.getStringExtra("extra"); 
+0

我想只允许我的活动中的某些功能访问信任的客户端。意图不可信,任何应用程序都可以添加额外的信息。我正在考虑的保护方案中,所有可信的应用都在应用清单中包含一些签名的元数据。要阅读它,我必须访问调用应用程序的PackageInfo。 – user2577593

+0

对不起,我对此没有任何建议。祝你好运。 – buczek

0

有没有什么办法可以让活动开始startActivity检索有关调用应用程序的任何信息?

不,对不起,超出您的startActivityForResult()黑客行为。 Android对“细粒度保护机制”的支持是围绕服务设计的,而不是活动或其他组件。

+0

谢谢。这很不幸。我很惊讶其他几个似乎有这个问题,似乎是一个非常基本的安全启用。 – user2577593

+0

@ user2577593:恕我直言,这与安全无关。您试图实施的是授权系统,只有授权应用程序(“可信任方”)才能执行操作。作为其IPC模型的一部分,Android没有跨应用程序许可框架。如果“可信方”都是您自己的应用程序,那么您可以使用签名级权限,而不需要知道请求者是谁,只需使用与您的签名相同的签名密钥进行签名。 – CommonsWare

+0

是的,许可系统 – user2577593

相关问题