Intereting Posts
SupportMapFragment воссоздается при изменении ориентации Desktop java app копирует и передает данные Android через USB Proguard vs redex от facebook – плюсы и минусы Android Spinner: как поймать, когда пользователь выходит из очереди, оставляя выбранное значение как есть? Невозможно открыть звуковое устройство: Недействительная или неподдерживаемая работа аудиоустройства Загрузка растрового изображения с помощью Picasso Android Studio – невозможно запустить приложение на устройстве minSdk (API 23, N)! = Устройство Sdk (API 22) Что такое символ 0x1f? Как реализовать трехстороннюю скользящую кнопку в Android Недопустимый куки-файл заголовка при интеграции twitter в android Аудиосистема случайно закрывается при кроссфейдинге 2 объекта MediaPlayer Android spinner не имеет пульсации на самой кнопке, просто ее параметры Получить номер и IMEI мобильного телефона Запустите два Android-эмулятора с разными языками System.exit () в android

Использование Mock Location в приложении Navigation

Я пытаюсь разработать приложение, которое будет имитировать маршрут через навигационное приложение Google. Я нашел несколько отличных примеров того, как реализовать провайдера определения местоположения в некоторых других сообщениях на этом сайте ( Android mock location на устройстве? ).
С простой модификацией исходного кода http://www.cowlumbus.nl/forum/MockGpsProvider.zip мое мошенничество отображается в приложении Google Maps. (Единственное изменение – имя поставщика макета для LocationManager.GPS_PROVIDER).
Моя проблема в том, что когда я открываю приложение «Навигация», он говорит «Поиск сигнала GPS». Я все еще вижу, как мое местоположение перемещается по карте; Однако он не создает маршрут к месту назначения. Мне было интересно, знает ли кто-нибудь, что мне нужно сделать, чтобы подделать навигацию, чтобы увидеть мое мошенническое местоположение в качестве сигнала GPS.
Благодарю.

public class MockGpsProviderActivity extends Activity implements LocationListener { private MockGpsProvider mMockGpsProviderTask = null; private Integer mMockGpsProviderIndex = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); String mocLocationProvider = LocationManager.GPS_PROVIDER; locationManager.addTestProvider(mocLocationProvider, false, false, false, false, true, false, false, 0, 5); locationManager.setTestProviderEnabled(mocLocationProvider, true); locationManager.requestLocationUpdates(mocLocationProvider, 0, 0, this); try { List<String> data = new ArrayList<String>(); InputStream is = getAssets().open("test.csv"); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line = null; while ((line = reader.readLine()) != null) { data.add(line); } // convert to a simple array so we can pass it to the AsyncTask String[] coordinates = new String[data.size()]; data.toArray(coordinates); // create new AsyncTask and pass the list of GPS coordinates mMockGpsProviderTask = new MockGpsProvider(); mMockGpsProviderTask.execute(coordinates); } catch (Exception e) {} } @Override public void onDestroy() { super.onDestroy(); // stop the mock GPS provider by calling the 'cancel(true)' method try { mMockGpsProviderTask.cancel(true); mMockGpsProviderTask = null; } catch (Exception e) {} // remove it from the location manager try { LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.removeTestProvider(MockGpsProvider.GPS_MOCK_PROVIDER); } catch (Exception e) {} } @Override public void onLocationChanged(Location location) { // show the received location in the view TextView view = (TextView) findViewById(R.id.text); view.setText( "index:" + mMockGpsProviderIndex + "\nlongitude:" + location.getLongitude() + "\nlatitude:" + location.getLatitude() + "\naltitude:" + location.getAltitude() ); } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } /** Define a mock GPS provider as an asynchronous task of this Activity. */ private class MockGpsProvider extends AsyncTask<String, Integer, Void> { public static final String LOG_TAG = "GpsMockProvider"; public static final String GPS_MOCK_PROVIDER = "GpsMockProvider"; /** Keeps track of the currently processed coordinate. */ public Integer index = 0; @Override protected Void doInBackground(String... data) { // process data for (String str : data) { // skip data if needed (see the Activity's savedInstanceState functionality) if(index < mMockGpsProviderIndex) { index++; continue; } // let UI Thread know which coordinate we are processing publishProgress(index); // retrieve data from the current line of text Double latitude = null; Double longitude = null; Double altitude= null; try { String[] parts = str.split(","); latitude = Double.valueOf(parts[0]); longitude = Double.valueOf(parts[1]); altitude = Double.valueOf(parts[2]); } catch(NullPointerException e) { break; } // no data available catch(Exception e) { continue; } // empty or invalid line // translate to actual GPS location Location location = new Location(LocationManager.GPS_PROVIDER); location.setLatitude(latitude); location.setLongitude(longitude); location.setAltitude(altitude); location.setTime(System.currentTimeMillis()); // show debug message in log Log.d(LOG_TAG, location.toString()); // provide the new location LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, location); // sleep for a while before providing next location try { Thread.sleep(200); // gracefully handle Thread interruption (important!) if(Thread.currentThread().isInterrupted()) throw new InterruptedException(""); } catch (InterruptedException e) { break; } // keep track of processed locations index++; } return null; } @Override protected void onProgressUpdate(Integer... values) { Log.d(LOG_TAG, "onProgressUpdate():"+values[0]); mMockGpsProviderIndex = values[0]; } } } 

Вот что мне не хватало:

 location.setLatitude(latitude); location.setLongitude(longitude); location.setAccuracy(16F); location.setAltitude(0D); location.setTime(System.currentTimeMillis()); location.setBearing(0F); , location.setLatitude(latitude); location.setLongitude(longitude); location.setAccuracy(16F); location.setAltitude(0D); location.setTime(System.currentTimeMillis()); location.setBearing(0F); 

Кроме того, важно выкинуть подшипник для навигации. В противном случае обновления маршрута будут неточными.