Android 시스템 시 뮬 레이 션 위치 사용 방법
1.시스템 설정 의 아 날로 그 위 치 를 엽 니 다.
Android 6.0 이하:[개발 자 옵션->아 날로 그 위치 허용]
Android 6.0 이상:[개발 자 옵션->아 날로 그 위치 정보 응용 프로그램 선택]
AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
2.시스템 시 뮬 레이 션 위치 가 열 렸 는 지 판단Android 6.0 이하:Settings.Secure.ALOW 사용MOCK_위치 판단.
//Android 6.0 이하:[아 날로 그 위치 허용]오픈 여부
boolean canMockPosition = Settings.Secure.getInt(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0
Android 6.0 이상:[아 날로 그 위치 허용]옵션 이 없 으 며 Settings.Secure.ALLOW 를 버 렸 습 니 다.MOCK_LOCATION,위의 방법 으로 판단 할 수 없습니다.[아 날로 그 위치 정보 응용 선택]방법 을 추 가 했 고 아 날로 그 위 치 를 사용 하 는 응용 을 선택해 야 합 니 다.그러나 현재 선택 한 애플 리 케 이 션 을 어떻게 가 져 올 지 모 르 기 때문에 addTestProvider 방법 을 성공 적 으로 실행 할 수 있 는 지 판단 합 니 다.현재 애플 리 케 이 션 을 선택 하지 않 으 면 addTestProvider 는 이상 을 던 집 니 다.
boolean hasAddTestProvider = false;
boolean canMockPosition = (Settings.Secure.getInt(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0)
|| Build.VERSION.SDK_INT > 22;
if (canMockPosition && hasAddTestProvider == false) {
try {
String providerStr = LocationManager.GPS_PROVIDER;
LocationProvider provider = locationManager.getProvider(providerStr);
if (provider != null) {
locationManager.addTestProvider(
provider.getName()
, provider.requiresNetwork()
, provider.requiresSatellite()
, provider.requiresCell()
, provider.hasMonetaryCost()
, provider.supportsAltitude()
, provider.supportsSpeed()
, provider.supportsBearing()
, provider.getPowerRequirement()
, provider.getAccuracy());
} else {
locationManager.addTestProvider(
providerStr
, true, true, false, false, true, true, true
, Criteria.POWER_HIGH, Criteria.ACCURACY_FINE);
}
locationManager.setTestProviderEnabled(providerStr, true);
locationManager.setTestProviderStatus(providerStr, LocationProvider.AVAILABLE, null, System.currentTimeMillis());
//
hasAddTestProvider = true;
canMockPosition = true;
} catch (SecurityException e) {
canMockPosition = false;
}
}
3.아 날로 그 위치
private class RunnableMockLocation implements Runnable {
@Override
public void run() {
while (true) {
try {
Thread.sleep(INTERVEL);
if (hasAddTestProvider() == false) {
continue;
}
try {
// (addTestProvider )
String providerStr = LocationManager.GPS_PROVIDER;
Location mockLocation = new Location(providerStr);
mockLocation.setLatitude(22); // ( )
mockLocation.setLongitude(113); // ( )
mockLocation.setAltitude(30); // ( )
mockLocation.setBearing(180); // ( )
mockLocation.setSpeed(10); // ( / )
mockLocation.setAccuracy(0.1f); // ( )
mockLocation.setTime(new Date().getTime()); //
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
mockLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
}
locationManager.setTestProviderLocation(providerStr, mockLocation);
} catch (Exception e) {
//
stopMockLocation();
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
4.아 날로 그 위치 정지
/**
* ,
* , removeTestProvider ;
* addTestProvider , , removeTestProvider GPS ;
*/
public void stopMockLocation() {
if (hasAddTestProvider) {
try {
locationManager.removeTestProvider(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {
// addTestProvider,
}
hasAddTestProvider = false;
}
}
Android Studio Project이상 은 본 고의 모든 내용 입 니 다.여러분 이 안 드 로 이 드 소프트웨어 프로 그래 밍 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.