Служба определения местоположения подразделения

У меня есть служба отслеживания местоположений, которую я пытаюсь выполнить. Для этого я пытаюсь использовать методы locationManager.addTestProvider и setTestProviderLocation. Однако, похоже, я не могу найти какое-либо место для прохода через провайдера и ударить по моему LocalListener. Вот мой код:

public void testGettingLocations() { mLocationManager = (LocationManager)mContext.getSystemService(Context.LOCATION_SERVICE); if (mLocationManager.getProvider(TEST_PROVIDER) != null) { mLocationManager.removeTestProvider(TEST_PROVIDER); } mLocationManager.addTestProvider(TEST_PROVIDER, false, false, false, false, false, false, false, Criteria.POWER_LOW, Criteria.ACCURACY_FINE); mLocationManager.setTestProviderEnabled(TEST_PROVIDER, true); mLocationManager.setTestProviderStatus(TEST_PROVIDER, LocationProvider.AVAILABLE, null, System.currentTimeMillis()); locations = new ArrayList<Location>(); mLocationManager.requestLocationUpdates(TEST_PROVIDER, 0, 0, ll); for (int i = 0; i<130; i++) { Location loc = new Location(TEST_PROVIDER); loc.setLatitude(0 + i); loc.setLongitude(130 - i); loc.setTime(System.currentTimeMillis()); loc.setSpeed(0); loc.setAccuracy(25); loc.setAltitude(0); loc.setBearing(0); mLocationManager.setTestProviderLocation(TEST_PROVIDER, loc); } assertEquals(130, locations.size()); } LocationListener ll = new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) {} @Override public void onProviderDisabled(String provider) {} @Override public void onLocationChanged(Location location) { locations.add(location); Log.d("TEST", "lat: " + location.getLatitude() + ", lon: " + location.getLongitude()); } }; 

Утверждение терпит неудачу, потому что location.size () возвращает 0, и оператор журнала в моем locationlistener никогда не печатается.

Кто-нибудь имел успех в использовании этих методов для тестирования служб локального тестирования?

Я смог получить пример @ ingsaurabh, работающий в единичном тесте, после внесения следующих изменений:

 import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.net.Socket; import java.net.UnknownHostException; public final class TestLocationProvider { static void sendLocation(double latitude, double longitude) { try { Socket socket = new Socket("10.0.2.2", 5554); // usually 5554 socket.setKeepAlive(true); String str = "geo fix " + longitude + " " + latitude ; Writer w = new OutputStreamWriter(socket.getOutputStream()); w.write(str + "\r\n"); w.flush(); } catch (UnknownHostException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } } } 

Важной деталью является IP-адрес. Эмулятор не распознает «localhost» как допустимое имя хоста.

Привет, в моем первом проекте, основанном на GPS, я столкнулся с той же проблемой, поэтому я пишу код Java, который отправит GPS Fix на мой эмулятор Android ниже, – это фрагмент.

 import java.io.IOException; import java.io.PrintStream; import java.net.Socket; import java.net.UnknownHostException; public class Main { static final int PAUSE = 4000; // ms static final float START_LONGITUDE = 51, START_LATITUDE = -1.3f; static final int NO_SAMPLE = 100; static final float DELTA_LONGITUDE = 0.000005f, DELTA_LADITUDE = 0.000005f; public static void main(String[] args) { try { Socket socket = new Socket("localhost", 5554); // usually 5554 PrintStream out = new PrintStream(socket.getOutputStream()); float longitude = START_LONGITUDE, latitude = START_LATITUDE; String str; for (int i = 0; i < NO_SAMPLE; i++) { str = "geo fix " + latitude + " " + longitude + "\n"; out.print(str); System.out.print(str); Thread.sleep(PAUSE); longitude += DELTA_LONGITUDE; latitude += DELTA_LADITUDE; } } catch (UnknownHostException e) { System.exit(-1); } catch (IOException e) { System.exit(-1); } catch (InterruptedException e) { System.exit(-1); } } } 
Intereting Posts
Каковы пропорции для всех Android-телефонов и планшетных устройств? Geofences недоступен и как его обрабатывать Масштабировать изображение, чтобы заполнить ширину ImageView и сохранить пропорции Android: I18n с параметрами Использование API Google Адресов в Android Задание полей в LinearLayout программно Как открыть окно Configure Launcher Icon в инструментах разработчика Android (ADT)? Панель действий выглядит вырезанной при использовании Theme.AppCompat.Dialog Как установить положение в прядильщике? Подключить Android к локальному Lan через телефон (через Wi-Fi или через USB-соединение) Как получить серийный номер или идентификатор эмулятора Android после его запуска? Как программно создать новый VPN-интерфейс с Android 4.0? Как вызвать метод из другого класса без передачи контекста? Как указать разные изображения, когда мой пользовательский виджет имеет фокус Каково определение ценности, предоставляемой функцией Android View.getHitRect ()?