android - 如何启动仅限服务的 Android 应用

标签 android service

我正在创建一个应用程序,其唯一组件是一个 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),这将在用户解锁手机时调用您的广播接收器。为了保持服务运行而不会轻易地自动关闭,您可以做的最后一件事是调用 Service.setForeground()。在你的服务 onCreate 告诉 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/

相关文章:

android - 如何通过 HTTPs 在 Android 中下载文件

android - Sinch验证错误42202

windows - 数据库故障使用 JDBC 持久性关闭 ActiveMQ windows 服务

angular - 在 Angular 8 中,如何从浏览器控制台访问注入(inject)的服务?

linux - 将 jar 文件作为 linux 服务运行

mysql - 如何在数据库中创建Service Builder的表?

android - 闭合微调器的文本颜色

java - 如何从 JSONObject 获取所有数组?

php - 使用android php json远程连接mysql数据库?

android防弹toast方法