Primeiro, você precisa da permissão no seu AndroidManifest.xml
:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Além disso, AndroidManifest.xml
defina seu serviço e ouça a ação BOOT_COMPLETED :
<service android:name=".MyService" android:label="My Service">
<intent-filter>
<action android:name="com.myapp.MyService" />
</intent-filter>
</service>
<receiver
android:name=".receiver.StartMyServiceAtBootReceiver"
android:label="StartMyServiceAtBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
Em seguida, você precisa definir o receptor que obterá a ação BOOT_COMPLETED e iniciará o serviço.
public class StartMyServiceAtBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);
}
}
}
E agora seu serviço deve estar em execução quando o telefone iniciar.
Intent.ACTION_BOOT_COMPLETED
vez de codificar a string no seu receptor. Além disso, deve usar o novoIntent(context, MySystemService.class)
construtor ao criar o Intent.Multiple markers at this line - BroadcastReceiver cannot be resolved to a type - The public type StartMyServiceAtBootReceiver must be defined in its own file
napublic class
linha. Alguma ideia?É assim que uma atividade começa a ser executada após a reinicialização do dispositivo Android:
Insira este código no seu
AndroidManifest.xml
arquivo, dentro do<application>
elemento ( não dentro do<activity>
elemento):Em seguida, crie uma nova classe
yourActivityRunOnStartup
(correspondendo àandroid:name
especificada para o<receiver>
elemento no manifesto):Nota: A chamada
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
é importante porque a atividade é iniciada a partir de um contexto fora da atividade. Sem isso, a atividade não será iniciada.Além disso, os valores
android:enabled
,android:exported
eandroid:permission
na<receiver>
tag não parecem obrigatório. O aplicativo recebe o evento sem esses valores. Veja o exemplo aqui .fonte
Application
? Talvez dentroonCreate()
?onReceive()
de umBroadcastReceiver
Ouça o ACTION_BOOT_COMPLETE e faça o que você precisa a partir daí. Há um trecho de código aqui.
Atualizar:
O link original na resposta está inoperante; portanto, com base nos comentários, aqui está o código vinculado, porque ninguém perderia o código quando os links estiverem inativos.
No AndroidManifest.xml (parte do aplicativo):
...
...
Fonte: https://web.archive.org/web/20150520124552/http://www.androidsnippets.com/autostart-an-application-at-bootup
fonte
Além disso, você pode usar um aplicativo como o AutoStart se não quiser modificar o código, para iniciar um aplicativo Android na inicialização: AutoStart - No root
fonte
A solução do Sean não funcionou para mim inicialmente (Android 4.2.2). Eu tive que adicionar uma atividade fictícia ao mesmo projeto Android e executá-la manualmente no dispositivo pelo menos uma vez. Em seguida, a solução do Sean começou a funcionar e o BroadcastReceiver foi notificado após as reinicializações subsequentes.
fonte
Eu gostaria de acrescentar um ponto nesta questão que eu estava enfrentando por alguns dias. Eu tentei todas as respostas, mas essas não estavam funcionando para mim. Se você estiver usando a versão Android 5.1, altere essas configurações.
Se você estiver usando a versão Android 5.1, precisará desmarcar (Restringir para iniciar) das configurações do aplicativo.
configurações> aplicativo> seu aplicativo> Restringir para iniciar (desmarcar)
fonte
Outra abordagem é usar em
android.intent.action.USER_PRESENT
vez deandroid.intent.action.BOOT_COMPLETED
evitar lentidão durante o processo de inicialização. Mas isso é apenastrue
se o usuário tiver ativado a tela de bloqueio - caso contrário, essa intenção nunca será transmitida.Blog de referência - O problema com a intenção ACTION_USER_PRESENT do Android
fonte