Сохранить приложение в фоновом режиме

Я хочу, чтобы мое приложение работало в фоновом режиме
У меня есть приложение, которое отправляет местоположение пользователя на наш сервер
У меня есть следующий код:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LocationManager locationManager; String context = Context.LOCATION_SERVICE; locationManager = (LocationManager)getSystemService(context); Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); criteria.setCostAllowed(true); criteria.setPowerRequirement(Criteria.POWER_LOW); String provider = locationManager.getBestProvider(criteria, true); updateWithNewLocation(null); locationManager.requestLocationUpdates(provider, (10*60*1000), 10, locationListener); } private final LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { updateWithNewLocation(location); } public void onProviderDisabled(String provider){ updateWithNewLocation(null); } public void onProviderEnabled(String provider){ } public void onStatusChanged(String provider, int status, Bundle extras){ } }; public void updateWithNewLocation(Location location) { if (location != null) { Dbhelper helper = new Dbhelper(this); final SQLiteDatabase db = helper.getWritableDatabase(); long time = System.currentTimeMillis(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss"); final String curTime = df.format(time); final double lat = location.getLatitude(); final double lng = location.getLongitude(); final double alt = location.getAltitude(); System.out.println(lat); System.out.println(lng); System.out.println(alt); db.execSQL("INSERT INTO location (longitude,latitude,altitude,tgl_buat) VALUES " + "('"+lng+"','"+lat+"','"+alt+"','"+curTime+"')"); db.close(); /*Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask(){ @Override public void run(){ db.execSQL("INSERT INTO location (longitude,latitude,altitude,tgl_buat) VALUES " + "('121.2149012','-6.217837','0.0','2012-05-07 10:20:01')"); db.close(); } }, 10*60*1000, 10*60*1000);*/ } } 

Я хочу, чтобы мое приложение работало в фоновом режиме. Я хочу, чтобы он запускался автоматически, когда телефон включен

Solutions Collecting From Web of "Сохранить приложение в фоновом режиме"

Очень простой ответ на вашу проблему – использовать Сервис . Это позволит вам выполнять множество задач, находясь в фоновом режиме, и это лучший выбор для отправки вашего местоположения на сервер тихо.

Прочтите этот ответ для справки.

Запустите свою фоновую логику в Service , и если вы хотите дать хороший опыт UX (а также иметь более высокий приоритет), Notification сообщение в строку состояния (используя NotificationManager ).

GrabLocationDetails.java

Используйте этот код как свой GrabLocationDetails.java

  public class GrabLocationDetails extends Service implements LocationListener { double lat,lng; private LocationManager locationManager; private String provider; boolean isGps; private ArrayList<String> mList; Context GLDContext; public GrabLocationDetails(Context cont){ this.GLDContext=cont; } public GrabLocationDetails(){} @Override public void onCreate() { super.onCreate(); mList = new ArrayList<String>(); isGps = false; lat=0.0; lng=0.0; } @Override public int onStartCommand(Intent intent, int flags, int startId) { //super.onStart(intent, startId); try { locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Criteria criteria = new Criteria(); provider = locationManager.getBestProvider(criteria, false); LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE); boolean enabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER); if (!enabled) { isGps = false; ListAddItem(isGps); SendBroadcast(); } else { isGps = true; Location location = locationManager.getLastKnownLocation(provider); lat=(location.getLatitude()); lng=(location.getLongitude()); ListAddItem(true); SendBroadcast(); locationManager.requestLocationUpdates(provider, 400, 1, this); } } catch (Exception e) { ListAddItem(isGps); SendBroadcast(); } return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); //locationManager.removeUpdates(this); } public void SendBroadcast(){ Intent broadcastIntent = new Intent(); broadcastIntent.setAction(CommandExecutionModule.LocationDetails); broadcastIntent.putExtra("Data", mList); sendBroadcast(broadcastIntent); } public void ListAddItem(boolean GPS) { //if(!GPS) //mList.add("0"); //else //mList.add("1"); mList.add(Double.toString(lat)); mList.add(Double.toString(lng)); } /**************************************************************************************************************/ @Override public void onLocationChanged(Location location){ locationManager.requestLocationUpdates(provider, 400, 1, this); mList.clear(); lat = (location.getLatitude()); lng = (location.getLongitude()); ListAddItem(isGps); SendBroadcast(); locationManager.removeUpdates(this); stopSelf(); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { locationManager.requestLocationUpdates(provider, 400, 1, this); } @Override public void onProviderEnabled(String provider){ isGps=true; } @Override public void onProviderDisabled(String provider){ isGps=false; lat=0.0; lng=0.0; mList.clear(); ListAddItem(isGps); //SendBroadcast(); } 

Вы должны использовать услугу и широковещательный приемник

Вы можете сохранить свое приложение в фоновом режиме с помощью Service

Надеюсь, эта ссылка поможет вам

Пожалуйста, ознакомьтесь с документацией для получения дополнительной информации