Como iniciar a aplicação Android apenas para Serviços

estou a criar uma aplicação cujo único componente é um service que continua a correr em segundo plano (basicamente um servidor proxy), mas não consigo encontrar uma forma de iniciar esse serviço. Aplicação não pode ter qualquer UI ou interação do usuário, então eu não estou usando atividade.
Broadcast receiver pode ouvir a transmissão de inicialização, mas como faço para começar o serviço pela primeira vez quando ele está instalado e como posso mantê-lo funcionando? ou existe uma transmissão que eu possa ouvir depois de app ser instalado, por exemplo, pode ser TIME_TICK mas isso tem de ser registado por actividade, acho eu.

Author: Community, 2009-06-13

3 answers

Infelizmente, neste momento, não existe uma forma fiável de receber um evento de transmissão depois de o seu aplicaiton ter sido instalado, a intençãoACTION_ PACKAGE_ADDED não transmite para o pacote recém-instalado.

Terá de ter uma classe de receptor de radiodifusão, bem como o seu serviço, para receber o evento ACTION_BOOT_ completo. Eu também recomendaria adicionar o ACTION_USER_ PRESENTENT {[[4]} a intenção de ser apanhado por aquele receptor de difusão, isto requer Android 1.5( minSDK=3), Isto irá ligar para o seu receptor de transmissão sempre que o utilizador desbloqueie o seu telemóvel. A última coisa que você pode fazer para tentar manter o seu serviço funcionando sem que ele seja facilmente desligado automaticamente é chamar o serviço .setForeground() em seu serviço onCreate para Android dizer que o seu serviço não deve ser interrompido, este foi adicionado principalmente para o leitor de mp3 do tipo de serviços que tem para manter em execução, mas pode ser usado por qualquer serviço.

Certifica-te que adicionas as permissões adequadas para os eventos boot_ completo e user_ presentent no seu manifesto.

Aqui está uma classe simples que você pode usar como receptor de transmissão para os eventos.
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));
            }
        }
    }
};
Boa sorte.
 43
Author: snctln, 2009-06-13 16:10:19

Volta START_STICKY em Service.onStartCommand

O Android vai reiniciar o seu serviço

 14
Author: shaobin0604, 2016-09-27 11:42:38
Estou a pesquisar sobre o mesmo assunto. Eis o que encontrei.: http://kfb-android.blogspot.de/2009/04/registering-for-timetick-after-reboot.html

Esta pequena demonstração simples mostra uma solução ao tocar um pouco de ping-pong entre um {[[0]} e um Service. O receptor está registado para iniciar no arranque, registrando-se no manifesto para receber ACTION_BOOT_COMPLETED. Apenas inicia um serviço quando se recupera. O Service por sua vez registra o BroadcastReceiver depois para o ACTION_TIME_TICK.

A lógica do aplicativo será implementada no BroadcastReceiver.

 0
Author: jboi, 2018-01-08 17:24:56