我能在没有活动或接收器的情况下启动服务吗?

8

我希望在一个APK中启动一个服务。

我尝试使用以下方式:

<application android:icon="@drawable/icon" android:label="@string/app_name">  
        <service android:name =".TestServcie">  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </service>  
    </application>

有什么想法吗?
谢谢


那么我理解它不起作用了?(不是因为你拼错了Service吗?)有任何反应吗?顺便问一下,您是否计划向用户提供任何服务启动的反馈? - EboMike
2个回答

30

你可以编写一个BroadcastReceiver,在接收到Intent后运行Service。例如,设备启动后或其他需要的Intent。

<receiver android:name=".StartupReceiver">
   <intent-filter>
     <action android:name="android.intent.action.BOOT_COMPLETED"/>
     <category android:name="android.intent.category.HOME"/>
   </intent-filter>
</receiver>

我认为这个答案是正确的。它描述了如何在用户没有操作的情况下启动服务,我认为这正是作者所寻找的。 - Undo
尽管我进行了大量的谷歌搜索,似乎用户确实必须运行应用程序才能注册接收器。 - Pijusn
1
在这种情况下,接收器是通过 AndroidManifest.xml 注册的。换句话说,当用户安装应用程序时,它们就被注册了。 - Qlimax
什么是 StartupReceiver - Incerteza

10

不,你不能。

创建一个简单的活动(Activity),启动服务并向用户提供一些反馈信息(例如,告诉他们服务已经启动),将该活动设置为 MAIN/LAUNCHER 意图。


6
请将这个糟糕且没用的回答删除,换成另一个放在顶部。 - Arijoon
1
只需要在安装后运行一次Activity即可。之后,您可以在启动时启动服务。您回答的第一部分是正确的,但其余部分并没有帮助。许多服务,如Viber,在不询问用户的情况下在后台自动启动。 - Arijoon
1
只有当用户通过设置>应用程序停止应用程序时,才会发生这种情况!这不是很常见的情况!!有许多应用程序利用此功能,例如Viber、Fb Messenger、Snapchat!它们都会在启动时开始运行,只要您启动了它们,直到您手动强制停止它们,它们就会在后台运行。我只是要求更有用的答案被提前,而您的答案作为一个“答案”并不有帮助,应该被删除或移动到评论中。(有相同问题的人不会喜欢您的答案) - Arijoon
2
@Arijoon:请仔细阅读原始问题。使用他们发布的AndroidManifest文件无法实现OP所要求的内容。而且,正如我所说,OP想知道是否可以“不使用活动或接收器”来完成此操作。此外,如果您真的认为我的答案没有帮助,不正确或是垃圾邮件,请随意将其向下投票和/或标记给管理员以便删除。我的答案之所以出现在其他答案之上,是因为OP已经接受了它 - 这并不妨碍Stack Overflow用户向下滚动查看其他答案 - 这就是Stack Overflow的工作方式。 - Squonk
显示剩余2条评论

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