为什么服务意图需要明确的意图

时间:2015-09-07 11:54:05

标签: android android-fragments android-intent

当我们开始如下服务时:

'There are no host names which could be used for validation.'

它给出了一个错误:服务意图必须是明确的。

为什么会如此。为什么android要求服务意图是明确的?

3 个答案:

答案 0 :(得分:1)

与Activity不同,以隐式意图启动服务时,没有用户界面 参与。当多个服务可以处理意图时, Android随机选择一个;不提示用户 选择一项服务。

如果恶意服务绑定到调用应用程序,则攻击者可以返回任意恶意数据 或者只是在不采取请求的操作的情况下返回成功结果。该 恶意服务可以窃取数据并撒谎完成 请求的行动。

答案 1 :(得分:0)

“为了确保您的应用是安全的,在启动或绑定服务时始终使用明确的意图,并且不要为服务声明意图过滤器。”(From Android developer) 必须是因为没有它,其他应用程序将可以启动您的服务等。

答案 2 :(得分:0)

对此更多一点: 如果我们想使用Implicit Intent(With Action Name),我们必须像这样使用setPackageName:

Intent intent = new Intent();
intent.setPackage("com.action.ServicePackageName");
intent.setAction("com.action.ActionNameOfService");
bindService(intent, yourServiceConectionObject, Service.BIND_AUTO_CREATE);
//or
//startService(intent);

但要注意的是,如果服务是本地服务;您应该使用显式意图,因为您可以使用服务类。我们也可以使用与上面所示相同的方式,但建议使用Explicit,原因与某些答案中提到的相同。 对于远程服务(其他应用程序中的服务);因为我们不能提供服务类;我们必须以这种方式绑定服务。