1

나는 이것에 관해서 물어 보아온 많은 질문을 알고 있으며, 며칠 동안 그 모든 일을 겪었지만 합리적인 답을 찾을 수 없었다. 나는 안드로이드에 안성맞춤이기 때문에 어떻게 일을 끝내야할지 전혀 모른다.Gps를 백그라운드 서비스로 실행하고 수신 된 현재 위치 데이터를 Sqlite의 값과 비교 하시겠습니까?

기본적으로 응용 프로그램이 시작될 때 백그라운드에서 서비스로 GPS를 실행하는 방법과 gps 백그라운드 서비스에서받은 데이터를 SQLite 데이터베이스에있는 데이터와 비교하는 방법을 알고 싶습니다.

+0

에 대한 질문의 첫 번째 부분'install '이다 http://stackoverflow.com/questions/2127044/how-to-start-android-service-on-installation에 백그라운드에서 실행 당신은 할 수 있습니다 귀하의 질문을 작은 단계로 나누고 귀하가 시도한 것을 보여주십시오. –

답변

1

위와 같은 서비스를 만들 수있는이 서비스는 GPS 및 네트워크 제공 업체의 위치 정보를 가져와 백그라운드에서 데이터베이스에 삽입합니다.

package com.example.alireza.locationtracker; 
import android.Manifest; 
import android.app.Service; 
import android.content.Intent; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.os.IBinder; 
import android.util.Log; 

import com.android.volley.AuthFailureError; 
import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.StringRequest; 
import com.android.volley.toolbox.Volley; 

import java.util.Hashtable; 
import java.util.Map; 


public class LocationTracker extends Service { 

public static LocationListener gpsloclistener; 
public static LocationListener netlistener; 
public static LocationManager mLocationManager; 
public static Location gpsLOc; 
public static Location netLOc; 
private static Location gpslocation; 
private static Location netlocation; 
public static boolean isGPSEnabled; 
public static boolean isNetworkEnabled; 


@Override 
public void onCreate() { 
    super.onCreate(); 
    gpsloclistener = new gpsloclistener(); 
    netlistener = new netlistener(); 
    getLocation(); 
    // myfunc(); 

} 

@Override 
public IBinder onBind(Intent intent) { 

    return null; 
} 


public void getLocation() { 
    try 
    { 
     mLocationManager = (LocationManager) this.getSystemService(LOCATION_SERVICE); 
     isGPSEnabled = mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
     isNetworkEnabled = mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
     if (isGPSEnabled || isNetworkEnabled) 
     { 
      if (isGPSEnabled) 
      { 
       mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,180000,0,gpsloclistener); 
      } 
      if (isNetworkEnabled) 
      { 
       mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 0, netlistener);//aslan bar roye network nemishe mahdodiyat gozasht 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public class gpsloclistener implements LocationListener { 
    @Override 
    public void onLocationChanged(final Location location) { 
     if (location.getAccuracy() < 20) { 
       G.database.execSQL("INSERT INTO Gps_Location (Gps_lat,Gps_long,Gps_speed,Gps_time,Gps_bearing,Gps_alt,Gps_acur) VALUES ('" + location.getLatitude() + "','" + location.getLongitude() + "','" + location.getSpeed() + "','" + System.currentTimeMillis() + "','" + location.getBearing() + "','" + location.getAltitude() + "','" + location.getAccuracy() + "')"); 


    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     getLocation(); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 

    } 
} 

private class netlistener implements LocationListener { 
    @Override 
    public void onLocationChanged(final Location location) { 
      G.database.execSQL("INSERT INTO Net_Location (Net_lat,Net_long,Net_speed,Net_time,Net_bearing,Net_alt,Net_acur) VALUES ('" + location.getLatitude() + "','" + location.getLongitude() + "','" + location.getSpeed() + "','" + System.currentTimeMillis() + "','" + location.getBearing() + "','" + location.getAltitude() + "','" + location.getAccuracy() + "')"); 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     getLocation(); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 

    } 
} 

}

이 서비스 삽입 위치 라이트 데이터베이스를 SQL하고 당신이

 try{ 
     startService(new Intent(getBaseContext(), LocationTracker.class)); 
    }catch (Exception ex){ 
    } 

의 주요 활동과 같은 곳에서이 서비스를 시작해야합니다 및 SQL 라이트 위치,이 재미있는 계산 거리와 비교하기 사이의 지점

public static double distFrom(double lat1, double lng1, double lat2, double lng2) { 
    double earthRadius = 3958.75; 
    double dLat = Math.toRadians(lat2 - lat1); 
    double dLng = Math.toRadians(lng2 - lng1); 
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
      Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * 
        Math.sin(dLng/2) * Math.sin(dLng/2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
    double dist = earthRadius * c; 

    int meterConversion = 1609; 
    double v = dist * meterConversion; 
    return v; 
} 

마지막으로 매니페스트에 대한 서비스 정의 t

<service android:name=".LocationTracker"/>