使用隐式意图启动服务为什么不安全?

3
当我使用隐式意图启动服务时,我收到一个警告:
隐式意图使用startservice不安全:...
为什么会这样?
编辑:
我正在使用自己的内部类别,其他应用程序不应使用我的内部类别,并且我的服务未导出android:exported =“false”

为了避免冲突,其他应用程序可能会接受相同的意图操作,需要进行保护。 - Gopal Gopi
@GopalRao 但如果我使用特定于应用程序的类别,则不会出现此问题。 - dcow
但是如果出现类别冲突怎么办?(非常非常罕见的情况)。Android系统不会询问用户选择要启动哪个服务... - Gopal Gopi
那听起来像是一个安卓系统的bug或疏忽。 - dcow
2个回答

11

通过使用隐式意图,您没有指定组件,这意味着组件将由Android根据给定的意图操作选择。

使用android:exported="false" 确保其他人无法启动您的服务。 但是,如果我编写了一个侦听您意图操作并执行一些恶意操作的BroadcastReeciver应用程序会怎样呢?

当我在我的应用程序中声明一个服务并使用相同的类别/过滤器/操作时,情况也是如此。

因此,请使用显式意图


我使用一个内部类别,可能将来会公开。 - dcow
我不在乎你是否添加了一个“恶意”的应用程序来捕获我的服务意图,你打算做什么呢...记录下我的服务何时启动?你可以直接向系统询问。我的意图中没有敏感数据。 - dcow
那就不用担心了。那只是一个警告,你可以忽略它 :) - Pankaj Kumar
3
@PankajKumar 我正在使用 Android 许可证检查代码(LVL),为此绑定服务使用 "new Intent("com.android.vending.licensing.ILicensingService")"。出现相同的警告和服务未启动。仅在 4.0 及更高版本的设备上发生。 - Bipin Vayalu
1
这没有任何意义。这正是意图的全部要点,允许您指定要完成的任务而不是要执行该任务的人,因此用户可以选择使用哪个应用程序。强制应用程序包括组件名称会使整个目的失去意义。并且这不是“仅仅是一个警告”,5.0完全打破了它。 - Glenn Maynard
显示剩余2条评论

0
如果您有多个具有相同IntentFilter的服务,系统将不知道应该启动哪一个,并且系统也不会要求用户进行选择。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接