Я знаю, что есть много вопросов, которые были заданы по этому поводу, и я прошел через все это с двух дней, но не смог найти разумный ответ. Я новичок в android и php, поэтому я понятия не имею, как все делается.
поэтому вначале я хочу знать, как запустить gps как службу в фоновом режиме, например, когда приложение установлено, оно запускается и периодически отправляет координаты на веб-сервер?
Просто создайте службу, которая работает в фоновом режиме все время.
Например:-
AndroidLocationServices
public class AndroidLocationServices extends Service { WakeLock wakeLock; private LocationManager locationManager; public AndroidLocationServices() { // TODO Auto-generated constructor stub } @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); PowerManager pm = (PowerManager) getSystemService(this.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "DoNotSleep"); // Toast.makeText(getApplicationContext(), "Service Created", // Toast.LENGTH_SHORT).show(); Log.e("Google", "Service Created"); } @Override @Deprecated public void onStart(Intent intent, int startId) { // TODO Auto-generated method stub super.onStart(intent, startId); Log.e("Google", "Service Started"); locationManager = (LocationManager) getApplicationContext() .getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, listener); } private LocationListener listener = new LocationListener() { @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub Log.e("Google", "Location Changed"); if (location == null) return; if (isConnectingToInternet(getApplicationContext())) { JSONArray jsonArray = new JSONArray(); JSONObject jsonObject = new JSONObject(); try { Log.e("latitude", location.getLatitude() + ""); Log.e("longitude", location.getLongitude() + ""); jsonObject.put("latitude", location.getLatitude()); jsonObject.put("longitude", location.getLongitude()); jsonArray.put(jsonObject); Log.e("request", jsonArray.toString()); new LocationWebService().execute(new String[] { Constants.TRACK_URL, jsonArray.toString() }); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } }; @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); wakeLock.release(); } public static boolean isConnectingToInternet(Context _context) { ConnectivityManager connectivity = (ConnectivityManager) _context .getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity != null) { NetworkInfo[] info = connectivity.getAllNetworkInfo(); if (info != null) for (int i = 0; i < info.length; i++) if (info[i].getState() == NetworkInfo.State.CONNECTED) { return true; } } return false; } }
LocationWebService
public class LocationWebService extends AsyncTask<String, String, Boolean> { public LocationWebService() { // TODO Auto-generated constructor stub } @Override protected Boolean doInBackground(String... arg0) { ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("location", arg0[1])); HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(arg0[0]); HttpParams httpParameters = new BasicHttpParams(); httpclient = new DefaultHttpClient(httpParameters); try { httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response; response = httpclient.execute(httppost); StatusLine statusLine = response.getStatusLine(); if (statusLine.getStatusCode() == HttpStatus.SC_OK) { Log.e("Google", "Server Responded OK"); } else { response.getEntity().getContent().close(); throw new IOException(statusLine.getReasonPhrase()); } } catch (Exception e) { e.printStackTrace(); } return null; } }
Вы можете найти образец проекта с Android App и соответствующими WebFiles в этом проекте github androidbackgroundgps