如何启动仅限服务的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中实现。