Intereting Posts
Использование старой версии библиотеки поддержки в одной из зависимостей Android Как добавить значок в каждый элемент списка listvIew и изменить цвет текста, цвет фона Как загрузить проект студии Android в Subversion в первый раз Как я могу получить номера строк в Android Studio Отмена выбора радиокнопки Android: textAllCaps = "false" не работает для дизайна TabLayout Перемещение и исчезновение строк кода; Проблема с XML-редактором Eclipse Создано виртуальное устройство Android, не показывающее Последнее слово в последней строке Android может привести к неправильному размеру текстового комментария при использовании правильного поля Как отменить анимацию, но не закончить ее? Android липкий заголовок RecyclerView / заголовок раздела RecyclerView Android – изменение параметров меню динамически, но за счет раздувания XML Лучший способ загрузить файл в Android-приложении IPhone для Android Market IntelliJ импортирует проект из POM с использованием неправильной версии JDK

Доступ к GPS не работает. Приложение использует сеть для получения местоположения

Мое приложение не хочет использовать GPS и использовать сеть вместо этого. Я проверил это, проанализировав широту и долготу, они немного случайны (например, местоположение сети).

Если я использую другое приложение, использующее GPS (например, трекер Endomondo Sports), я вижу характерную метку, а это значит, что в настоящее время работает GPS:

Введите описание изображения здесь

Когда я запускаю свое приложение, нет никакой отметки.

Я использую следующий код (код Lars Vogella, Источник: http://www.vogella.com/articles/AndroidLocationAPI/article.html ):

import android.app.Activity; import android.content.Context; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; public class ShowLocationActivity extends Activity implements LocationListener { private TextView latituteField; private TextView longitudeField; private LocationManager locationManager; private String provider; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); latituteField = (TextView) findViewById(R.id.TextView02); longitudeField = (TextView) findViewById(R.id.TextView04); // Get the location manager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // Define the criteria how to select the locatioin provider -> use // default Criteria criteria = new Criteria(); provider = locationManager.getBestProvider(criteria, false); Location location = locationManager.getLastKnownLocation(provider); // Initialize the location fields if (location != null) { System.out.println("Provider " + provider + " has been selected."); onLocationChanged(location); } else { latituteField.setText("Location not available"); longitudeField.setText("Location not available"); } } /* Request updates at startup */ @Override protected void onResume() { super.onResume(); locationManager.requestLocationUpdates(provider, 400, 1, this); } /* Remove the locationlistener updates when Activity is paused */ @Override protected void onPause() { super.onPause(); locationManager.removeUpdates(this); } @Override public void onLocationChanged(Location location) { int lat = (int) (location.getLatitude()); int lng = (int) (location.getLongitude()); latituteField.setText(String.valueOf(lat)); longitudeField.setText(String.valueOf(lng)); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { Toast.makeText(this, "Enabled new provider " + provider, Toast.LENGTH_SHORT).show(); } @Override public void onProviderDisabled(String provider) { Toast.makeText(this, "Disabled provider " + provider, Toast.LENGTH_SHORT).show(); } } 

Конечно, я добавил разрешения в файл AndroidManifest.xml :

 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> 

Есть идеи?

Решение: вы можете использовать GPS вместо выбора лучшего поставщика, определяя критерии.

Пример: Заменить:

 locationManager.requestLocationUpdates(provider, 400, 1, this); 

С:

 locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 400, 1, this); 

Explaination:

В зависимости от варианта использования вашего приложения вы должны выбрать конкретного поставщика местоположения, то есть LocationManager.GPS_PROVIDER или LocationManager.NETWORK_PROVIDER

Кроме того, вы можете предоставить некоторые входные критерии, такие как точность, энергопотребление, денежные затраты и т. Д., И пусть Android решит ближайший провайдер сопоставления местоположений

  // Retrieve a list of location providers that have fine accuracy, no monetary cost, etc Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setCostAllowed(false); String providerName = locManager.getBestProvider(criteria, true); //and then you can make location update request with selected best provider locationManager.requestLocationUpdates(provider, 400, 1, this); 

Посмотрите, как использовать locationmanager , как указать критерии и как метод getBestProvider работает для справки