title: How can I start android application on device boot?
body: <p>I have need to start android foreground service, and launch activity from that service on device boot. I have extensively searched web and stackoverflow and tried different suggestions but it is very strange that I can not make this functionality work.</p>
  
  <p>I can not understand what I am doing wrong.</p>
  
  <p>Below is the code from my project and the content of manifest file.</p>
  
  <p>what I am doing wrong and how to solve it, the functionality to work on most android devices?</p>
  
  <p>This is my AndroidManifest.xml:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="kor.location.tracker"&gt;
  
  
      &lt;uses-permission android:name="android.permission.INTERNET" &gt;&lt;/uses-permission&gt;
      &lt;uses-permission android:name="android.permission.FOREGROUND_SERVICE" /&gt;
      &lt;uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /&gt;
      &lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/&gt;
      &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/&gt;
  
  
      &lt;application
          android:allowBackup="true"
          android:icon="@mipmap/ic_launcher"
          android:label="@string/app_name"
          android:roundIcon="@mipmap/ic_launcher_round"
          android:supportsRtl="true"
          android:theme="@style/AppTheme"&gt;
  
          &lt;receiver android:name="kor.location.tracker.AutoStart"&gt;
              &lt;intent-filter&gt;
                  &lt;action android:name="android.intent.action.BOOT_COMPLETED" /&gt;
              &lt;/intent-filter&gt;
          &lt;/receiver&gt;
  
  
          &lt;activity
              android:name=".MainActivity"
              android:label="@string/app_name"
              android:theme="@style/AppTheme.NoActionBar"&gt;
              &lt;intent-filter&gt;
                  &lt;action android:name="android.intent.action.MAIN" /&gt;
  
                  &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
              &lt;/intent-filter&gt;
          &lt;/activity&gt;
  
  
          &lt;service android:enabled="true"
              android:name="kor.location.tracker.WorkerService"
              android:exported="true"
              android:permission="android.permission.BIND_JOB_SERVICE"
              /&gt;
  
      &lt;/application&gt;
  
  &lt;/manifest&gt;
  </code></pre>
  
  <p>This is my Austostart.java:</p>
  
  <pre><code>package kor.location.tracker;
  
  
  import android.content.BroadcastReceiver;
  import android.content.Context;
  import android.content.Intent;
  import android.os.Build;
  import android.util.Log;
  import android.widget.Toast;
  
  public class AutoStart  extends BroadcastReceiver
      {
          @Override
          public void onReceive(Context context, Intent arg1)
          {
  
              try {
                  System.out.println("test1");
                  if (Intent.ACTION_BOOT_COMPLETED.equals(arg1.getAction())) {
                      System.out.println("test2");
                      WorkerService.enqueueWork(context, new Intent());
                      System.out.println("test3");
                  }
  
              }catch(Exception ex) {
  
                  Toast.makeText(context, ex.getMessage(), Toast.LENGTH_LONG).show();
              }
              /*
              Intent intent = new Intent(context, WorkerService.class);
              if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.O) {
                  context.startForegroundService(intent);
              } else {
                  context.startService(intent);
              }
              Log.i("Autostart", "started");
  
               */
          }
      }
  
  </code></pre>
  
  <p>This is my service class WorkerService.java: </p>
  
  <pre><code>package kor.location.tracker;
  
  import android.app.Service;
  import android.content.Context;
  import android.content.Intent;
  import android.location.Location;
  import android.location.LocationListener;
  import android.location.LocationManager;
  import android.os.Bundle;
  import android.os.IBinder;
  import android.util.Log;
  import android.widget.Toast;
  
  import androidx.annotation.NonNull;
  import androidx.core.app.JobIntentService;
  
  public class WorkerService  extends JobIntentService
  {
  
      public static void enqueueWork(Context context, Intent work) {
          enqueueWork(context, WorkerService.class, 104501, work);
      }
  /*
      private static final String TAG = "MyService";
      @Override
      public IBinder onBind(Intent intent) {
          return null;
      }
      public void onDestroy() {
          Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
          Log.d(TAG, "onDestroy");
      }
  */
      @Override
      protected void onHandleWork(@NonNull Intent intent) {
          Intent intents = new Intent(getBaseContext(),MainActivity.class);
          intents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          startActivity(intents);
          //Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
          //Log.d(TAG, "onStart");
      }
  /*
      @Override
      public void onStart(Intent intent, int startid)
      {
          final LocationListener mLocationListener = new LocationListener() {
              @Override
              public void onLocationChanged(final Location location) {
                  //your code here
                  String kuku = location.getLatitude() + "=" + location.getLongitude();
                  Toast.makeText(WorkerService.this, kuku, Toast.LENGTH_LONG).show();
                  Log.d(TAG, kuku);
  
                  ;
                  ;
                  location.getAltitude();
                  location.getSpeed();
              }
  
              @Override
              public void onStatusChanged(String provider, int status, Bundle extras) {
  
              }
  
              @Override
              public void onProviderEnabled(String provider) {
  
              }
  
              @Override
              public void onProviderDisabled(String provider) {
  
              }
          };
  
          LocationManager mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
  
  
          try {
  
              mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000,
                      1, mLocationListener);
  
          }catch (SecurityException ex){
  
              Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
              Log.d(TAG, ex.getMessage());
          }
  
  
          Intent intents = new Intent(getBaseContext(),MainActivity.class);
          intents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          startActivity(intents);
          Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
          Log.d(TAG, "onStart");
      }
      */
  }
  
  </code></pre>
  
  <p>And this is my activity that is not getting launched:</p>
  
  <pre><code>package kor.location.tracker;
  
  import android.Manifest;
  import android.content.pm.PackageManager;
  import android.nfc.Tag;
  import android.os.Bundle;
  
  import com.google.android.material.floatingactionbutton.FloatingActionButton;
  import com.google.android.material.snackbar.Snackbar;
  
  import androidx.appcompat.app.AppCompatActivity;
  import androidx.appcompat.widget.Toolbar;
  import androidx.core.app.ActivityCompat;
  
  import android.util.Log;
  import android.view.View;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.widget.Toast;
  
  import java.util.ArrayList;
  import java.util.List;
  
  public class MainActivity extends AppCompatActivity {
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          Toolbar toolbar = findViewById(R.id.toolbar);
          setSupportActionBar(toolbar);
  
          FloatingActionButton fab = findViewById(R.id.fab);
          fab.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                          .setAction("Action", null).show();
              }
          });
  
          Toast.makeText(getBaseContext(), "Hello........", Toast.LENGTH_LONG).show();
  
  
          List&lt;String&gt; permissions = new ArrayList&lt;String&gt;();
  
          if(getApplicationContext().checkCallingOrSelfPermission(Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED){
              permissions.add(Manifest.permission.INTERNET);
          }
  
          if(getApplicationContext().checkCallingOrSelfPermission(Manifest.permission.RECEIVE_BOOT_COMPLETED) != PackageManager.PERMISSION_GRANTED){
              permissions.add(Manifest.permission.RECEIVE_BOOT_COMPLETED);
          }
  
          if(getApplicationContext().checkCallingOrSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){
              permissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);
          }
  
          if(getApplicationContext().checkCallingOrSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){
              permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
          }
  
          if(getApplicationContext().checkCallingOrSelfPermission(Manifest.permission.FOREGROUND_SERVICE) != PackageManager.PERMISSION_GRANTED){
              permissions.add(Manifest.permission.FOREGROUND_SERVICE);
          }
  
          if(permissions.size()&gt;0) {
  
              String[] arr = new String[permissions.size()];
              permissions.toArray(arr);
              //System.out.println();
              ActivityCompat.requestPermissions(this, arr, 1);
          }
      }
  
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          // Inflate the menu; this adds items to the action bar if it is present.
          getMenuInflater().inflate(R.menu.menu_main, menu);
          return true;
      }
  
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          // Handle action bar item clicks here. The action bar will
          // automatically handle clicks on the Home/Up button, so long
          // as you specify a parent activity in AndroidManifest.xml.
          int id = item.getItemId();
  
          //noinspection SimplifiableIfStatement
          if (id == R.id.action_settings) {
              return true;
          }
  
          return super.onOptionsItemSelected(item);
      }
  }
  
  </code></pre>