Intereting Posts
Динамическое добавление вида в виджет Android Использование нескольких сеансов с андроидами facebook sdk? Каков наилучший способ хранения таких данных, как «Избранное» на Android-приложении? Может ли кто-нибудь помочь мне в этом отчете о сбое Android 9-патч-пакет Область обнаружения пределов в API Vision Listview + BaseAdapter – как уведомить об изменении в одном элементе? Таинственная stacktrace в консоли разработчика Android (размер растрового изображения превышает 32 бит) Лучшие практики при кластеризации большого количества маркеров в Google Maps Android V2 Edittext автоматически получает фокус при перемещении между страницами в представлении пейджера Android-список устройств BLE после сканирования устройства Как настроить proguard для интерфейса javascript? Какие виды автоматически сохраняются при изменении конфигурации Android AVD устанавливает настраиваемое оборудование Отключить просмотр списка Android «синий» фон

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

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

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);*/ } } 

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

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

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

Запустите свою фоновую логику в 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

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

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