De tudo o que vi no Stack Exchange e em outros lugares, tenho tudo configurado corretamente para iniciar um IntentService quando o sistema operacional Android é inicializado. Infelizmente, ele não está iniciando na inicialização e não estou recebendo nenhum erro. Talvez os especialistas possam ajudar ...
Manifesto:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.phx.batterylogger"
android:versionCode="1"
android:versionName="1.0"
android:installLocation="internalOnly">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BATTERY_STATS" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<service android:name=".BatteryLogger"/>
<receiver android:name=".StartupIntentReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
</manifest>
BroadcastReceiver para inicialização:
package com.phx.batterylogger;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class StartupIntentReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, BatteryLogger.class);
context.startService(serviceIntent);
}
}
ATUALIZAÇÃO : tentei quase todas as sugestões abaixo e adicionei o registro, como Log.v("BatteryLogger", "Got to onReceive, about to start service");
ao manipulador onReceive do StartupIntentReceiver, e nada é registrado. Portanto, não está nem chegando ao BroadcastReceiver.
Acho que estou implantando o APK e testando corretamente, apenas executando Debug no Eclipse e o console diz que o instalou com sucesso no meu tablet Xoom em \ BatteryLogger \ bin \ BatteryLogger.apk. Em seguida, para testar, eu reinicializo o tablet e, em seguida, vejo os logs no DDMS e verifico os Serviços em execução nas configurações do SO. Isso tudo parece correto ou estou perdendo alguma coisa? Novamente, qualquer ajuda é muito apreciada.
Log.v("BatteryLogger", "Got to onReceive, about to start service");
ao manipulador onReceive e ele nunca aparece nos logs. Então, o ouvinte está falhando (?)Respostas:
Bem, aqui está um exemplo completo de um aplicativo AutoStart
Arquivo AndroidManifest
autostart.java
service.java
hello.java - aparecerá toda vez que você iniciar o dispositivo após executar a aplicação uma vez.
fonte
Seu serviço pode estar sendo encerrado antes de ser concluído devido ao dispositivo entrar em suspensão após a inicialização. Você precisa obter um wake lock primeiro. Felizmente, a biblioteca de suporte nos oferece uma classe para fazer isso:
em seguida, em seu serviço, certifique-se de liberar o wake lock:
Não se esqueça de adicionar a permissão WAKE_LOCK:
fonte
Seguir deve funcionar. Eu verifiquei. Pode ser que o seu problema esteja em outro lugar.
fonte
Log()
instruções esteja lá e o dispositivo do emulador não mostre meu serviço como sendo executado nas configurações do sistema operacional. Aqui está o erro no DDMS:System.err - at com.phx.batterylogger$1.onReceive(BatteryLogger.java:43)
Isso significa que o problema está na linha 43 do meu serviço BatteryLogger?Eu encontrei uma maneira de fazer seu aplicativo funcionar bem quando o dispositivo for reinicializado, siga as etapas abaixo para ter sucesso.
Arquivo AndroidManifest
UIBootReceiver
Isso é pedir permissão para não precisar gerenciar a economia de bateria para este aplicativo para que você possa executar em segundo plano de forma estável.
Declare este código em onCreate () da classe MainActivity:
fonte
É muito parecido com o meu, mas uso o nome completo do pacote para o receptor:
Eu tenho:
fonte
Tive sucesso sem o pacote completo, você sabe onde a cadeia de chamadas está sendo interrompida? Se você depurar com
Log()
o, em que ponto ele não funcionará mais?Acho que pode estar no seu IntentService, tudo parece bem.
fonte
Log.v("BatteryLogger", "Got to onReceive, about to start service");
ao manipulador onReceive e ele nunca aparece nos logs. Então, o ouvinte está falhando (?)Apenas para facilitar a pesquisa, conforme mencionado nos comentários,
isso não é possível desde 3.1https://stackoverflow.com/a/19856367/6505257fonte