Google 스토어에서 'Fake Gps'를 다운로드하여 사용한 후, 나는 교육 목적으로 만들어야한다고 생각했습니다.android 모의 위치가 위치 서비스로 작동하지 않습니다 .fusedlocationapi
GoogleApiClient FusedLocationAPI를 사용하여 현재 위치를 가져오고 모의 위치를 만들었습니다. 현재 위치를 알 수 있지만 위치를 모의 할 수는 없습니다.
public class GoogleApiClientGeoLocation implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
private GoogleApiClient googleApiClient;
public GoogleApiClientGeoLocation(Context activity) {
googleApiClient = new GoogleApiClient.Builder(activity, this, this).addApi(LocationServices.API).build();
....
}
public void connect() {
if (googleApiClient != null) {
googleApiClient.connect();
}
}
public void disconnect() {
googleApiClient.disconnect();
}
@Override
public void onConnected(@Nullable Bundle bundle) {
LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, locationRequest, this);
}
@Override
public void onLocationChanged(Location location) {
Log.e("TAG","Location changed"+location.getLatitude() + ", "+ location.getLongitude());
}
private static final String PROVIDER = LocationManager.NETWORK_PROVIDER;//"flp";
private static final double LAT = 37.377166;
private static final double LNG = -122.086966;
private static final float ACCURACY = 3.0f;
public Location createLocation(double lat, double lng, float accuracy) { //<-for testing purposes using a static lat,long
// Create a new Location
Location newLocation = new Location(PROVIDER);
newLocation.setLatitude(LAT);
newLocation.setLongitude(LNG);
newLocation.setAltitude(1000);
newLocation.setElapsedRealtimeNanos(System.nanoTime());
newLocation.setTime(System.currentTimeMillis());
newLocation.setAccuracy(500);
return newLocation;
}
public void startMock() {
LocationServices.FusedLocationApi.setMockMode(googleApiClient, true);
}
public void stopMock() {
LocationServices.FusedLocationApi.setMockMode(googleApiClient, false);
}
public void domock() {
Location testLocation = createLocation(LAT, LNG, ACCURACY);
if (ContextCompat.checkSelfPermission(_context, android.Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
LocationServices.FusedLocationApi.setMockLocation(googleApiClient, testLocation);
Log.e("TAG","Location Mocked");
}else{
Log.e("TAG","Can not Mock location");
}
}
}
모든 기능을 처리하는 클래스 GoogleApiClientGeoLocation이 있습니다. 흐름은 초기화 -> 연결 -> 시작 -> 모의 -> 멈춤 -> 연결 해제입니다.
connect()를 수행하면 locationchange()가 현재 위치를 제공하지만 startmock() 및 domock()는 멈추고 아무 것도 반환하지 않으며, stopmock()을 호출하면 locationchange()가 현재 위치를 다시 제공하기 시작합니다.
'위치 조롱'이라는 로그 메시지가 표시됩니다.
제 'PROVIDER'가 잘못 되었습니까?
모의 위치를 만들고 Google지도로 이동하여 모의 위치를 가리킬 수 있기를 원합니다.