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

最佳答案

不幸的是,现在没有可靠的方法在您的应用程序安装后接收广播事件,ACTION_PACKAGE_ADDED Intent 不会广播到新安装的包。

您必须拥有广播接收器类以及您的服务才能接收 ACTION_BOOT_COMPLETED 事件。我还建议添加由该广播接收器捕获的 ACTION_USER_PRESENT Intent ,这需要 Android 1.5 (minSDK=3),每当用户解锁手机时,它都会调用您的广播接收器。您可以做的最后一件事是在您的服务 onCreate 中调用 Service.setForeground() 来告诉 Android 您的服务不应停止,这主要是为 mp3 播放器类型添加的必须保持运行但可以被任何服务使用的服务。

确保为 list 中的 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));
            }
        }
    }
};

祝你好运。

关于android - 如何启动仅服务的 Android 应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/990217/

10-14 13:27
查看更多