2012-06-06 2 views
4

Я пытаюсь получить текущее местоположение в андроида с использованием LocationManager и LocationListener, как описано в http://developer.android.com/guide/topics/location/obtaining-user-location.htmlLocationManager requestLocationUpdates не работает

Однако onLocationChanged метод LocationListener никогда не называется. Я использовал настоящий Android-телефон, а также использовал эмулятор и смоделированное местоположение, измененное с помощью telnet, как описано в ссылке выше.

Вот мой код:

public class MyActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     /* Use the LocationManager class to obtain GPS locations */ 
     LocationManager mlocManager = (LocationManager) 
       getSystemService(Context.LOCATION_SERVICE); 
     LocationListener mlocListener = new CustomLocationListener(
       getApplicationContext()); 
     // Location Providers 
     String locationProvider = LocationManager.NETWORK_PROVIDER; 
     // LocationProvider locationProvider = LocationManager.GPS_PROVIDER; 
     mlocManager 
       .requestLocationUpdates(locationProvider, 0, 0, mlocListener); 
    } 
} 

и мой LocationListener: не

public class CustomLocationListener implements LocationListener { 

    private Context m_context; 

    public CustomLocationListener(Context context) { 
     m_context = context; 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     double latitude = location.getLatitude(); 
     double longitude = location.getLongitude(); 
     String Text = latitude + " " + longitude; 
     Toast.makeText(m_context, Text, Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO 
    } 

    @Override 
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {} 
} 

Так onLocationChanged не называется. Может ли кто-нибудь увидеть проблему ?? Большое спасибо

+0

Включили ли вы услуги GPS на свой телефон и подтвердили ли вы, что у вас должно быть место? (Ожидание в течение нескольких минут не является подтверждением, если вы находитесь в плохой зоне обслуживания, может быть недостаточно 30 минут ...) – Sam

+0

Должен спросить: есть ли у вас разрешения на размещение, указанные в манифесте? – dymmeh

+0

@dymmeh да, я добавил разрешение в манифесте –

ответ

1

Убедитесь, что в настройках включены правильные службы определения местоположения. Вы также можете использовать isProviderEnabled(), чтобы проверить, будет ли выбран выбранный вами поставщик. И убедитесь, что в вашем манифесте разрешены разрешения COARSE или FINE.

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

+0

К сожалению, 'isProviderEnabled()' не работает, как рекламируется. См. Http://stackoverflow.com/questions/10154937/isproviderenabledlocationmanager-network-provider-return-false и http://stackoverflow.com/questions/16748300/locationmanager-isproviderenabledlocationmanager-network-provider-is-not-relia – Jules

3

Вы также можете позволить телефону определить лучший поставщик, а не просто установка

String locationProvider = LocationManager.NETWORK_PROVIDER; 

Попробуйте вместо этого:

Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_FINE); 
criteria.setAltitudeRequired(false); 
criteria.setBearingRequired(false); 
criteria.setCostAllowed(true); 
criteria.setPowerRequirement(Criteria.POWER_LOW); 
String locationProvider = mlocManager.getBestProvider(criteria, true); 

Кроме того, вы испытаны путем перемещения устройства на новое место? В противном случае событие onlocationchanged может не срабатывать. Когда я размышлял над этим материалом пару лет назад, я поставил несколько «тостов», чтобы предупредить меня о моих координатах lat/long, когда я обошел блок, чтобы проверить, что это событие стреляет.

+1

Как заставить эмулятор «перейти в новое место»? –

+1

@MathiasLykkegaardLorenzen: Я всегда разрабатываю устройство, но похоже, что вы можете имитировать местоположение в эмуляторе, если будете следовать ссылке из оригинального вопроса Дэна Дину. Перейдите к нижней части этой статьи и посмотрите «Использование команды« geo »в консоли эмулятора». – CircuitBreaker716

3

Это выглядит как Android Bug 57707 для меня.

Если это так, перезагрузка устройства должна помочь, по крайней мере, на некоторое время.

Или вы можете использовать Google Play Services Location API.

Используя как Wi-Fi, GPS, так и расположение в сети, API местоположения сервисов Google Play скроет тот факт, что позиционирование сети нарушено; это будет очевидно только тогда, когда у вас нет ни GPS, ни Wifi.

0

У меня возникла аналогичная проблема. Try replacing getApplication() with MainAvtivity.this

Кроме того, убедитесь, что вы сохраняете разрешения для местоположений как FINE, так и COARSE. Если ваш целевой API больше 23, вы также должны обрабатывать разрешения от java-кода.

Смежные вопросы