Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trying to start a service on boot on Android

I've been trying to start a service when a device boots up on android, but I cannot get it to work. I've looked at a number of links online but none of the code works. Am I forgetting something?

AndroidManifest.xml

<receiver     android:name=".StartServiceAtBootReceiver"     android:enabled="true"     android:exported="false"     android:label="StartServiceAtBootReceiver" >     <intent-filter>         <action android:name="android.intent.action._BOOT_COMPLETED" />     </intent-filter> </receiver>  <service     android:name="com.test.RunService"     android:enabled="true" /> 

BroadcastReceiver

public void onReceive(Context context, Intent intent) {     if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {         Intent serviceLauncher = new Intent(context, RunService.class);         context.startService(serviceLauncher);         Log.v("TEST", "Service loaded at start");     } } 
like image 715
Alex Avatar asked May 06 '10 20:05

Alex


People also ask

How do I trigger a service in Android?

You can start a service from an activity or other application component by passing an Intent to startService() or startForegroundService() . The Android system calls the service's onStartCommand() method and passes it the Intent , which specifies which service to start.

What is started service in Android?

Started. A service is started when an application component, such as an activity, starts it by calling startService(). Once started, a service can run in the background indefinitely, even if the component that started it is destroyed. 2. Bound.

How check service is start or not in android?

You can do this by making your own Interface where you declare for example " isServiceRunning() ". You can then bind your Activity to your Service, run the method isServiceRunning(), the Service will check for itself if it is running or not and returns a boolean to your Activity.


2 Answers

The other answers look good, but I thought I'd wrap everything up into one complete answer.

You need the following in your AndroidManifest.xml file:

  1. In your <manifest> element:

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
  2. In your <application> element (be sure to use a fully-qualified [or relative] class name for your BroadcastReceiver):

    <receiver android:name="com.example.MyBroadcastReceiver">       <intent-filter>           <action android:name="android.intent.action.BOOT_COMPLETED" />       </intent-filter>   </receiver> 

    (you don't need the android:enabled, exported, etc., attributes: the Android defaults are correct)

    In MyBroadcastReceiver.java:

    package com.example;  public class MyBroadcastReceiver extends BroadcastReceiver {     @Override     public void onReceive(Context context, Intent intent) {         Intent startServiceIntent = new Intent(context, MyService.class);         context.startService(startServiceIntent);     } } 

From the original question:

  • it's not clear if the <receiver> element was in the <application> element
  • it's not clear if the correct fully-qualified (or relative) class name for the BroadcastReceiver was specified
  • there was a typo in the <intent-filter>
like image 112
Timo Bruck Avatar answered Oct 02 '22 22:10

Timo Bruck


As an additional info: BOOT_COMPLETE is sent to applications before external storage is mounted. So if application is installed to external storage it won't receive BOOT_COMPLETE broadcast message.

More details here in section Broadcast Receivers listening for "boot completed"

like image 44
inazaruk Avatar answered Oct 02 '22 21:10

inazaruk