물리적 장치 (Nexus One)에서 내 위치를 어떻게 조롱 할 수 있습니까? 에뮬레이터 제어판의 에뮬레이터 로이 작업을 수행 할 수 있지만 실제 장치에서는 작동하지 않습니다.
답변
할 수있는 유일한 방법은 모의 위치 제공자를 사용하는 것입니다.
설정의 개발 패널에서 모의 위치를 활성화하고 추가해야합니다.
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
당신의 매니페스트에.
이제 코드로 들어가서 자신의 모의 위치 제공자를 만들고이 제공자의 위치를 설정할 수 있습니다.
답변
이 랩을 개발 연구소에서만 사용하는 경우 GPS 칩을 납땜하여 다른 장치의 NMEA 시퀀스로 직렬 포트를 직접 공급할 수 있습니다.
답변
케이블이 편리했으면 좋겠다. 에뮬레이터에 텔넷하여 위치를 변경할 수 있다는 것을 알고 있습니다.
$ telnet localhost 5554
Android Console: type 'help' for a list of commands
OK
geo fix -82.411629 28.054553
OK
장치에 텔넷을 사용할 수 있는지 기억할 수 없지만 할 수 있다고 생각합니다. 이게 도움이 되길 바란다.
이를 위해 adb (Android 디버깅 브리지)가 필요합니다 (CLI).
답변
위치 서비스 권한을 사용하여 위치를 조롱 할 수 있습니다.
"android.permission.ACCESS_MOCK_LOCATION"
그런 다음 자바 코드에서
// Set location by setting the latitude, longitude and may be the altitude...
String[] MockLoc = str.split(",");
Location location = new Location(mocLocationProvider);
Double lat = Double.valueOf(MockLoc[0]);
location.setLatitude(lat);
Double longi = Double.valueOf(MockLoc[1]);
location.setLongitude(longi);
Double alti = Double.valueOf(MockLoc[2]);
location.setAltitude(alti);
답변
다음 코드로 성공했습니다. 비록 어떤 이유로 든 다른 잠금 장치를 시도했지만 (다른 LatLng 쌍을 시도한 경우에도) 그것은 나를 위해 일했습니다. mLocationManager
는에 LocationManager
연결되어 있습니다 LocationListener
:
private void getMockLocation()
{
mLocationManager.removeTestProvider(LocationManager.GPS_PROVIDER);
mLocationManager.addTestProvider
(
LocationManager.GPS_PROVIDER,
"requiresNetwork" == "",
"requiresSatellite" == "",
"requiresCell" == "",
"hasMonetaryCost" == "",
"supportsAltitude" == "",
"supportsSpeed" == "",
"supportsBearing" == "",
android.location.Criteria.POWER_LOW,
android.location.Criteria.ACCURACY_FINE
);
Location newLocation = new Location(LocationManager.GPS_PROVIDER);
newLocation.setLatitude (/* TODO: Set Some Lat */);
newLocation.setLongitude(/* TODO: Set Some Lng */);
newLocation.setAccuracy(500);
mLocationManager.setTestProviderEnabled
(
LocationManager.GPS_PROVIDER,
true
);
mLocationManager.setTestProviderStatus
(
LocationManager.GPS_PROVIDER,
LocationProvider.AVAILABLE,
null,
System.currentTimeMillis()
);
mLocationManager.setTestProviderLocation
(
LocationManager.GPS_PROVIDER,
newLocation
);
}
답변
Dr1Ku가 게시 한 내용이 작동합니다. 오늘 코드를 사용했지만 더 많은 위치를 추가해야했습니다. 개선 된 사항은 다음과 같습니다.
선택 사항 : LocationManager.GPS_PROVIDER 문자열을 사용하는 대신 고유 한 변수 PROVIDER_NAME을 정의하여 사용할 수 있습니다. 위치 업데이트를 등록 할 때 직접 문자열로 지정하는 대신 기준을 통해 공급자를 선택하십시오.
첫 번째 : removeTestProvider를 호출하는 대신 먼저 제거 할 공급자가 있는지 확인합니다 (IllegalArgumentException을 피하기 위해).
if (mLocationManager.getProvider(PROVIDER_NAME) != null) {
mLocationManager.removeTestProvider(PROVIDER_NAME);
}
둘째 : 둘 이상의 위치를 게시하려면 위치의 시간을 설정해야합니다.
newLocation.setTime(System.currentTimeMillis());
...
mLocationManager.setTestProviderLocation(PROVIDER_NAME, newLocation);
또한 구글 테스트가 될 것 같다 용도의 MockLocationProviders이 : http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/location/LocationManagerProximityTest.java
또 다른 좋은 예제는 http://pedroassuncao.com/blog/2009/11/12/android-location-provider-mock/ 에서 찾을 수 있습니다.
또 다른 좋은 기사는 다음과 같습니다. http://ballardhack.wordpress.com/2010/09/23/location-gps-and-automated-testing-on-android/#comment-1358
또한 실제로 작동하는 코드도 있습니다 에뮬레이터에서.
답변
Android 마켓에서 기기의 “Mock GPS 위치”를 지정할 수있는 앱이 있습니다.
https://market.android.com을 검색 하여 “My Fake Location”이라는 앱을 찾았습니다.
위에서 언급 한 Mock GPS Provider ( http://www.cowlumbus.nl/forum/MockGpsProvider.zip )는 소스 코드를 포함하는 또 다른 예입니다. 제공된 APK를 설치할 수는 없지만 (실패라고 말합니다. [INSTALL_FAILED_OLDER_SDK]이며 다시 컴파일해야 할 수도 있습니다)
GPS 모의 위치를 사용하려면 장치 설정에서 GPS 모의 위치를 활성화해야합니다. 설정-> 응용 프로그램-> 개발로 이동하여 “모의 위치 허용”을 확인하십시오.
그런 다음 위에서 설명한 것과 같은 앱을 사용하여 GPS 좌표를 설정하면 Google지도와 다른 앱이 지정한 모의 GPS 위치를 사용합니다.