【问题标题】:How do I prevent other android apps from accessing my activities如何阻止其他安卓应用访问我的活动
【发布时间】:2011-06-23 21:01:37
【问题描述】:

我有一个 android 应用程序,我在清单中定义了几个不同的活动。其中一些活动具有我使用的意图过滤器(例如 ACTION_PICK)。由于意图过滤器,这些活动会在其他应用程序请求活动来处理 ACTION_PICK 时出现。有什么方法可以防止这种情况,使其他应用程序无法访问我的活动?我已经尝试在我的活动中设置 android:exported="false",但没有任何效果。

【问题讨论】:

  • 哎呀,刚刚在这里找到答案:stackoverflow.com/questions/1571615/… 有什么办法可以删除这个问题吗?
  • 我已投票结束您的问题,因为它与您作为答案显示的问题重复。但是,还需要 3 票才能关闭它。
  • 实际上,mah 发布的答案要简洁得多,所以也许我们应该保持开放。
  • 让它保持打开状态......这是一个比 1571615 更好的问答版本。
  • 我投票结束,因为您问是否有办法删除您的问题。没有任何进一步的投票,所以如果 mah 的答案是您正在寻找的,那么接受它,问题/答案将留给其他人在未来看到。

标签: android android-manifest


【解决方案1】:

您需要:
* 定义权限(仅适用于具有您签名的应用程序)
* 定义您的应用程序使用您定义的权限
* 需要您想要保护的活动的权限。 (注意不要在您的主要启动活动中使用它)。

<!-- define a permission -->
<permission
    android:protectionLevel="signature"
    android:name="com.mypackage.MYPERMISSION"/>

<uses-permission android:name="com.mypackage.MYPERMISSION" />

<!-- define an activity which can only be started through internal code -->
<activity android:name="..."
          android:permission="com.mypackage.MYPERMISSION" >
    ...
</activity>

【讨论】:

  • 为了完整起见,permission 和 uses-permission 标签位于 manifest 标签内,但在 application 标签之外,而 activity 标签位于 application 标签内。对吗?
  • @Dominic - 是的,这就是我的清单的外观。也许其他职位也可以,但我没有尝试过。
  • 虽然标题明确将范围限制为其他应用程序,但我认为值得一提的是,通过活动管理器执行此操作时它不起作用,因为它是一个系统级进程。 (终端命令示例:“adb shell am start you.package/full.activity.name”)。并确保您没有尝试使用使用相同 DEBUG 密钥库签名的另一个应用程序启动它,因为它将匹配其签名!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
相关资源
最近更新 更多