12

Android N允许您将您的活动链接到您的应用页面 设置。只需为android.intent.action.APPLICATION_PREFERENCES添加<intent-filter>即可。 Android N的“设置”应用将在您的应用中查找 拥有该<intent-filter>的活动。如果设置找到一个,它会在设置中为您的应用的页面添加一个齿轮 图标,并且如果用户点击该齿轮,他们将会被带到您指定的活动。设置应用程序如何启动应用程序的非导出活动?

我很担心安全问题,所以我申请an issue,寻找我们可以用android:permission使用,允许设置开始我们的活动权限,但不允许其他应用程序来启动我们的活动(例如,WRITE_SECURE_SETTINGS)。

cketti然后指出you could just mark the activity as not exported, via android:exported="false"。令我惊讶的是,这很有效。

设置应用程序如何启动标记为未导出的活动?

我当然可以看到有一个权限来控制这个。但是,快速阅读设置应用程序的清单(master branch,n-developer-preview-5分支)并没有明显的变化。

所以:

  • 是否有允许应用程序启动另一个应用程序的非出口部件的许可?如果是这样,那是什么?

  • 如果不是,Settings如何解决这个问题?

+0

你在这里回答了类似的问题:http://stackoverflow.com/questions/13892721/activity-exported-false-listed-in-activity-chooser – Shaishav

+0

@Shaishav:虽然它是在一个相关的主题(保护与' '),它没有解决我在这里提出的问题。 – CommonsWare

回答

7

我猜想在清单中没有任何内容给予应用程序调用导出活动的权限。我相信它完成这个的方式是在设置应用程序的Android.mk文件中设置LOCAL_PRIVILEGED_MODULE := true。此标志将给予应用程序系统级权限,并在操作系统编译期间将其放入system/priv-app/目录。

如果你看frameworks/base/core/java/android/app/ActivityManager.java的方法checkComponentPermission你可以看到,如果UID是SYSTEM的,那么不管导出的设置如何,授予组件许可。

+0

我购买了它基于设置应用程序的UID的概念。我不是100%确信'checkComponentPermission()'是决定的地方,因为我不希望SDK类决定是否允许你开始一个活动。 – CommonsWare

+0

@CommonsWare你是什么意思 - “我不希望SDK类正在决定你是否被允许开始一个活动”?你会期望什么? – Vikram

+0

@Vikram:我预料它会在系统服务('ActivityManagerService'?)内部确定,或者是这个效果。现在,他们可能会使用SDK中的相同'checkComponentPermission()'方法。 – CommonsWare

相关问题