Como iniciar o serviço na inicialização do dispositivo (aplicativo de execução automática, etc.)
Primeiro: desde a versão Android 3.1+, você não recebe o BOOT_COMPLETE se o usuário nunca iniciou o aplicativo pelo menos uma vez ou se o aplicativo "força o fechamento". Isso foi feito para impedir que o malware registrasse automaticamente o serviço. Essa falha de segurança foi fechada nas versões mais recentes do Android.
Solução:
Crie aplicativo com atividade. Quando o usuário o executa, uma vez que o aplicativo pode receber a mensagem de transmissão BOOT_COMPLETE.
Por segundo: BOOT_COMPLETE é enviado antes da montagem do armazenamento externo. Se o aplicativo estiver instalado no armazenamento externo, ele não receberá a mensagem de difusão BOOT_COMPLETE.
Nesse caso, há duas soluções:
- Instale seu aplicativo no armazenamento interno
- Instale outro aplicativo pequeno no armazenamento interno. Este aplicativo recebe BOOT_COMPLETE e executa o segundo aplicativo no armazenamento externo.
Se seu aplicativo já estiver instalado no armazenamento interno, o código abaixo pode ajudá-lo a entender como iniciar o serviço na inicialização do dispositivo.
Em Manifest.xml
Permissão:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Registre seu receptor BOOT_COMPLETED:
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
Registre seu serviço:
<service android:name="org.yourapp.YourCoolService" />
No receptor OnBoot.java:
public class OnBoot extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// Create Intent
Intent serviceIntent = new Intent(context, YourCoolService.class);
// Start service
context.startService(serviceIntent);
}
}
Para a HTC, talvez você também precise adicionar no manifesto esse código se o dispositivo não capturar RECEIVE_BOOT_COMPLETED:
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
O receptor agora fica assim:
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
Como testar o BOOT_COMPLETED sem reiniciar o emulador ou dispositivo real? É fácil. Tente o seguinte:
adb -s device-or-emulator-id shell am broadcast -a android.intent.action.BOOT_COMPLETED
Como obter o ID do dispositivo? Obtenha a lista de dispositivos conectados com IDs:
adb devices
adb no ADT, por padrão, você pode encontrar em:
adt-installation-dir/sdk/platform-tools
Aproveitar! )