如何启动仅限服务的Android应用程序

我正在创build一个应用程序,其唯一的组件是一个service ,继续在后台运行(基本上是一个代理服务器),但我无法find一个方法如何启动该服务。 应用程序不能有任何用户界面或用户交互,所以我不使用活动。
Broadcast receiver可以监听BOOT广播,但是如何在安装时首次启动服务,以及如何保持运行? 或者有一个广播,我可以收听应用程序安装后,例如可能是TIME_TICK,但必须从我认为的活动注册。

不幸的是,现在没有可靠的方式来接收广播事件后,您的应用程序已被安装, ACTION_PACKAGE_ADDED意向不广播到新安装的软件包。

您必须拥有广播接收器类以及您的服务才能接收ACTION_BOOT_COMPLETED事件。 我还build议添加ACTION_USER_PRESENT意图被该广播接收机捕获,这需要Android 1.5(minSDK = 3),这将在用户解锁手机时调用您的广播接收机。 你可以做的最后一件事情是保持服务的运行,而不是自动closures服务,就是在服务onCreate中调用Service.setForeground()来告诉Android你的服务不应该被停止,这主要是MP3播放器types的服务必须保持运行,但可以被任何服务使用。

确保在manifest中为boot_complete和user_present事件添加适当的权限。

这是一个简单的类,您可以将其用作事件的广播接收器。

 package com.snctln.util.WeatherStatus; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class WeatherStatusServiceReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction() != null) { if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) || intent.getAction().equals(Intent.ACTION_USER_PRESENT)) { context.startService(new Intent(context, WeatherStatusService.class)); } } } }; 

祝你好运。

Service.onStartCommand返回START_STICKY

Android将重新启动您的服务

我正在研究同一个问题。 以下是我发现的: http : //kfb-android.blogspot.de/2009/04/registering-for-timetick-after-reboot.html

这个简单的小演示通过在BroadcatReceiver和服务之间播放一点点乒乓来显示解决scheme。 接收器注册在启动时注册在清单接收ACTION_BOOT_COMPLETED。 它只是在收到ACTION_BOOT_COMPLETED时启动服务。 该服务轮stream注册BroadcastReceiver然后为ACTION_TIME_TICK。

应用程序逻辑将在BroadcastReceiver中实现。