为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

jeck猫 2019-10-16 13:57:43
我正在创建一个应用程序,该应用程序的唯一组件是service继续在后台运行的组件(基本上是代理服务器),但是我找不到能够启动该服务的方法。应用程序不能有任何UI或用户交互,所以我没有使用Activity。Broadcast receiver可以收听BOOT广播,但是如何在安装后第一次启动服务以及如何使其继续运行?还是有广播,我可以在安装应用后收听广播,例如可能是TIME_TICK,但必须从我认为的活动中进行注册。
查看完整描述

3 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

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


为了接收ACTION_BOOT_COMPLETED事件,您将必须具有广播接收器类以及您的服务。我还建议添加该广播接收器要捕获的ACTION_USER_PRESENT意图,这需要Android 1.5(minSDK = 3),只要用户解锁手机,这都会调用广播接收器。要使服务正常运行而又不容易被自动关闭,您可以做的最后一件事是在服务的onCreate上调用Service.setForeground()来告诉Android您不应停止该服务,这主要是添加了用于必须保持运行但可以被任何服务使用的mp3播放器类型的服务。


确保为清单中的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));

            }

        }

    }

};

祝好运。


查看完整回答
反对 回复 2019-10-16
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

返回START_STICKYService.onStartCommand

Android将重新启动您的服务


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 305 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信