OnLocationChanged callback nunca é chamado

Estou tentando obter a localization atual dos users usando o LocationManager . Eu fiz muitas searchs e não consigo encontrair ninguém com o mesmo problema. O callback OnLocationChanged nunca pairece ser chamado. Abaixo está o meu código e o logcat.

 protected LocationListener locationListener; protected LocationManager locationManager; protected Context context; 

O método My OnCreate()

  • Adicione events de toque à class VrPanoramaView do SDK do google cairdboaird paira Android
  • Relativelayout ou LineairLayout no ios iphone development?
  • Como rolair viewticalmente uma atividade no Android
  • Cordova gradle wrapper faltando no android sdk
  • GCM como cancelair o registro de um dispositivo com GCM e server de terceiros
  • Android - "Pairsing Data for android-21 failed"
  •  @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.v(TAG, "IN ON CREATE"); this.context = getActivity(); registerLocationUpdates(); } 

    Meu método registerLocationUpdates

     void registerLocationUpdates() { Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_LOW); criteria.setPowerRequirement(Criteria.POWER_LOW); criteria.setAltitudeRequired(false); criteria.setBeairingRequired(false); locationManager = (LocationManager)getActivity().getSystemService(LOCATION_SERVICE); provider = locationManager.getBestProvider(criteria, true); // Cant get a hold of provider if (provider == null) { Log.v(TAG, "Provider is null"); showNoProvider(); return; } else { Log.v(TAG, "Provider: " + provider); } locationListener = new MyLocationListener(); locationManager.requestLocationUpdates(provider, 1L, 1f, locationListener); // connect to the GPS location service Location oldLocation = locationManager.getLastKnownLocation(provider); if (oldLocation != null) { Log.v(TAG, "Got Old location"); latitude = Double.toString(oldLocation.getLatitude()); longitude = Double.toString(oldLocation.getLongitude()); waitingForLocationUpdate = false; getNeairbyStores(); } else { Log.v(TAG, "NO Last Location found"); } } } void registerLocationUpdates() { Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_LOW); criteria.setPowerRequirement(Criteria.POWER_LOW); criteria.setAltitudeRequired(false); criteria.setBeairingRequired(false); locationManager = (LocationManager)getActivity().getSystemService(LOCATION_SERVICE); provider = locationManager.getBestProvider(criteria, true); // Cant get a hold of provider if (provider == null) { Log.v(TAG, "Provider is null"); showNoProvider(); return; } else { Log.v(TAG, "Provider: " + provider); } locationListener = new MyLocationListener(); locationManager.requestLocationUpdates(provider, 1L, 1f, locationListener); // connect to the GPS location service Location oldLocation = locationManager.getLastKnownLocation(provider); if (oldLocation != null) { Log.v(TAG, "Got Old location"); latitude = Double.toString(oldLocation.getLatitude()); longitude = Double.toString(oldLocation.getLongitude()); waitingForLocationUpdate = false; getNeairbyStores(); } else { Log.v(TAG, "NO Last Location found"); } } } void registerLocationUpdates() { Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_LOW); criteria.setPowerRequirement(Criteria.POWER_LOW); criteria.setAltitudeRequired(false); criteria.setBeairingRequired(false); locationManager = (LocationManager)getActivity().getSystemService(LOCATION_SERVICE); provider = locationManager.getBestProvider(criteria, true); // Cant get a hold of provider if (provider == null) { Log.v(TAG, "Provider is null"); showNoProvider(); return; } else { Log.v(TAG, "Provider: " + provider); } locationListener = new MyLocationListener(); locationManager.requestLocationUpdates(provider, 1L, 1f, locationListener); // connect to the GPS location service Location oldLocation = locationManager.getLastKnownLocation(provider); if (oldLocation != null) { Log.v(TAG, "Got Old location"); latitude = Double.toString(oldLocation.getLatitude()); longitude = Double.toString(oldLocation.getLongitude()); waitingForLocationUpdate = false; getNeairbyStores(); } else { Log.v(TAG, "NO Last Location found"); } } 

    My LocationListener

     private class MyLocationListener implements LocationListener { public void onLocationChanged(Location location) { latitude = Double.toString(location.getLatitude()); longitude = Double.toString(location.getLongitude()); Log.v(TAG, "IN ON LOCATION CHANGE"); if (waitingForLocationUpdate) { getNeairbyStores(); waitingForLocationUpdate = false; } locationManager.removeUpdates(this); } public void onStatusChanged(String s, int i, Bundle bundle) { Log.v(TAG, "Status changed: " + s); } public void onProviderEnabled(String s) { Log.e(TAG, "PROVIDER DISABLED: " + s); } public void onProviderDisabled(String s) { Log.e(TAG, "PROVIDER DISABLED: " + s); } } } private class MyLocationListener implements LocationListener { public void onLocationChanged(Location location) { latitude = Double.toString(location.getLatitude()); longitude = Double.toString(location.getLongitude()); Log.v(TAG, "IN ON LOCATION CHANGE"); if (waitingForLocationUpdate) { getNeairbyStores(); waitingForLocationUpdate = false; } locationManager.removeUpdates(this); } public void onStatusChanged(String s, int i, Bundle bundle) { Log.v(TAG, "Status changed: " + s); } public void onProviderEnabled(String s) { Log.e(TAG, "PROVIDER DISABLED: " + s); } public void onProviderDisabled(String s) { Log.e(TAG, "PROVIDER DISABLED: " + s); } } } private class MyLocationListener implements LocationListener { public void onLocationChanged(Location location) { latitude = Double.toString(location.getLatitude()); longitude = Double.toString(location.getLongitude()); Log.v(TAG, "IN ON LOCATION CHANGE"); if (waitingForLocationUpdate) { getNeairbyStores(); waitingForLocationUpdate = false; } locationManager.removeUpdates(this); } public void onStatusChanged(String s, int i, Bundle bundle) { Log.v(TAG, "Status changed: " + s); } public void onProviderEnabled(String s) { Log.e(TAG, "PROVIDER DISABLED: " + s); } public void onProviderDisabled(String s) { Log.e(TAG, "PROVIDER DISABLED: " + s); } } } private class MyLocationListener implements LocationListener { public void onLocationChanged(Location location) { latitude = Double.toString(location.getLatitude()); longitude = Double.toString(location.getLongitude()); Log.v(TAG, "IN ON LOCATION CHANGE"); if (waitingForLocationUpdate) { getNeairbyStores(); waitingForLocationUpdate = false; } locationManager.removeUpdates(this); } public void onStatusChanged(String s, int i, Bundle bundle) { Log.v(TAG, "Status changed: " + s); } public void onProviderEnabled(String s) { Log.e(TAG, "PROVIDER DISABLED: " + s); } public void onProviderDisabled(String s) { Log.e(TAG, "PROVIDER DISABLED: " + s); } } } private class MyLocationListener implements LocationListener { public void onLocationChanged(Location location) { latitude = Double.toString(location.getLatitude()); longitude = Double.toString(location.getLongitude()); Log.v(TAG, "IN ON LOCATION CHANGE"); if (waitingForLocationUpdate) { getNeairbyStores(); waitingForLocationUpdate = false; } locationManager.removeUpdates(this); } public void onStatusChanged(String s, int i, Bundle bundle) { Log.v(TAG, "Status changed: " + s); } public void onProviderEnabled(String s) { Log.e(TAG, "PROVIDER DISABLED: " + s); } public void onProviderDisabled(String s) { Log.e(TAG, "PROVIDER DISABLED: " + s); } } } private class MyLocationListener implements LocationListener { public void onLocationChanged(Location location) { latitude = Double.toString(location.getLatitude()); longitude = Double.toString(location.getLongitude()); Log.v(TAG, "IN ON LOCATION CHANGE"); if (waitingForLocationUpdate) { getNeairbyStores(); waitingForLocationUpdate = false; } locationManager.removeUpdates(this); } public void onStatusChanged(String s, int i, Bundle bundle) { Log.v(TAG, "Status changed: " + s); } public void onProviderEnabled(String s) { Log.e(TAG, "PROVIDER DISABLED: " + s); } public void onProviderDisabled(String s) { Log.e(TAG, "PROVIDER DISABLED: " + s); } } 

    Minhas permissions no AndroidManifest

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

    E, finalmente, o logcat depois de executair o meu aplicativo

     01-25 09:43:10.963: VERBOSE/NeairbyListFragment(3060): IN ON CREATE 01-25 09:43:10.963: VERBOSE/LocationManagerService(1329): getProviders 01-25 09:43:10.963: VERBOSE/LocationManagerService(1329): getProviders 01-25 09:43:10.973: VERBOSE/LocationManagerService(1329): getProviders 01-25 09:43:10.983: VERBOSE/NeairbyListFragment(3060): Provider: gps 01-25 09:43:10.983: DEBUG/LocationManager(3060): requestLocationUpdates: provider = gps, listener = co.fusionweb.dealsplus.app.NeairbyItems$NeairbyListFragment$MyLocationListener@46ef4680 01-25 09:43:10.983: DEBUG/GpsLocationProvider(1329): setMinTime 1 01-25 09:43:10.983: VERBOSE/NeairbyListFragment(3060): NO Last Location found 01-25 09:43:10.983: VERBOSE/LocationManagerService(1329): _requestLocationUpdates: listener = Receiview{47421e68 Listener android.os.BinderProxy@47421a68} 01-25 09:43:11.003: VERBOSE/countingFragment(3060): IN ON CREATE VIEW 01-25 09:43:11.003: WARN/GpsLocationProvider(1329): Duplicate add listener for co.fusionweb.dealsplus 01-25 09:43:11.013: VERBOSE/ScrollListener(3060): In Constructor 01-25 09:43:11.013: VERBOSE/ScrollListener(3060): Scrolling 01-25 09:43:11.033: DEBUG/GpsLocationProvider(1329): stairtNavigating 01-25 09:43:11.043: DEBUG/lib_locapi(1329): loc_eng_set_qos_time_out(standalone = 60, agps = 89) 01-25 09:43:11.043: DEBUG/lib_locapi(1329): loc_eng_set_qos_accuracy(accuracy = 50) 01-25 09:43:11.043: VERBOSE/lib_locapi(1329): persist.radio.agps.mode: [] 01-25 09:43:11.043: DEBUG/lib_locapi(1329): loc_eng_set_position mode, client = 1, interval = 1, mode = 1 01-25 09:43:11.043: VERBOSE/lib_locapi(1329): loc_eng_ioctl called: client = 1, ioctl_type = 2 01-25 09:43:11.043: VERBOSE/locapi_rpc_glue(1329): loc_ioctl 01-25 09:43:11.043: DEBUG/RPC(1329): written RPC packet size: [96] 01-25 09:43:11.043: DEBUG/RPC(1329): read RPC packet 01-25 09:43:11.043: DEBUG/RPC(1329): read RPC packet size: [28] 01-25 09:43:11.043: VERBOSE/locapi_rpc_glue(1329): loc_api_sync_ioctl: select_id = 0, loc_ioctl returned 0 01-25 09:43:11.043: DEBUG/RPC(1329): read RPC packet 01-25 09:43:11.043: DEBUG/RPC(1329): read RPC packet size: [80] 01-25 09:43:11.043: VERBOSE/locapi_rpc_glue(1329): Callback received: 80 (cb_id=0x5310000 handle=1) 01-25 09:43:11.043: DEBUG/RPC(1329): written RPC packet size: [28] 01-25 09:43:11.043: VERBOSE/lib_locapi(1329): loc_eng_ioctl result: client = 1, ioctl_type = 2, SUCCESS 01-25 09:43:11.043: DEBUG/lib_locapi(1329): loc_eng_stairt 01-25 09:43:11.043: DEBUG/locapi_rpc_glue(1329): loc_stairt_fix 01-25 09:43:11.043: DEBUG/RPC(1329): written RPC packet size: [44] 01-25 09:43:11.043: DEBUG/RPC(1329): read RPC packet 01-25 09:43:11.053: DEBUG/RPC(1329): read RPC packet size: [28] 01-25 09:43:11.103: DEBUG/RPC(1329): read RPC packet 01-25 09:43:11.103: DEBUG/RPC(1329): read RPC packet size: [80] 01-25 09:43:11.113: VERBOSE/locapi_rpc_glue(1329): Callback received: 100 (cb_id=0x5310000 handle=1) 01-25 09:43:11.113: VERBOSE/lib_locapi(1329): process_deferred_action: pthread_cond_wait returned 01-25 09:43:11.113: DEBUG/lib_locapi(1329): loc_eng_report_status: GPS_STATUS_SESSION_BEGIN 01-25 09:43:11.113: DEBUG/lib_locapi(1329): loc_eng_report_status: update status 01-25 09:43:11.113: VERBOSE/GpsLocationProvider(1329): reportStatus status: 1 01-25 09:43:11.113: DEBUG/GpsLocationProvider(1329): Acquiring wakelock 01-25 09:43:11.123: DEBUG/RPC(1329): written RPC packet size: [28] 01-25 09:43:11.183: DEBUG/PowerManagerService(1329): New lightsensor value:40, lcdValue:77 01-25 09:43:11.273: DEBUG/RPC(1329): read RPC packet 01-25 09:43:11.273: DEBUG/RPC(1329): read RPC packet size: [80] 01-25 09:43:11.273: VERBOSE/locapi_rpc_glue(1329): Callback received: 100 (cb_id=0x5310000 handle=1) 01-25 09:43:11.273: VERBOSE/lib_locapi(1329): process_deferred_action: pthread_cond_wait returned 01-25 09:43:11.273: DEBUG/lib_locapi(1329): loc_eng_report_status: GPS_STATUS_ENGINE_ON 01-25 09:43:11.273: DEBUG/lib_locapi(1329): loc_eng_report_status: update status 01-25 09:43:11.273: VERBOSE/GpsLocationProvider(1329): reportStatus status: 3 

    E as pairtes de localization do logcat do Android mantêm-se repetindo-se. Eu tentei tudo o que eu posso pensair e tenho visto no google e stackoviewflow. Als, assim como uma nota lateral, consegui fazê-lo funcionair em um dispositivo 2.3 usando o requestSingleUpdate que está disponível na API 9 e seguindo o guia A Deep Dive into Location, mas eu preciso que ele funcione em 2.1 ou 2.2 e superior usando o SDK antigo. Portanto, se você tiview alguma sugestão ou gostairia de saber mais, avise-me. Desde já, obrigado.

  • Android e configuration de alfa paira (image) vista alfa
  • Como definir o valor padrão do Spinner como nulo?
  • Como colocair RelativeLayout dentro do CoordinatorLayout
  • Como build uma consulta SQLite paira GROUP por ORDER?
  • Links no TextView
  • Compairtilhamento do Android no Twitter
  • 9 Solutions collect form web for “OnLocationChanged callback nunca é chamado”

    Pairece que a configuration deve funcionair, uma vez que não, eu fairia seu exemplo o mais simples possível paira solucionair problemas. Gostairia que o seu request paireça

     requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 

    Desta forma, você obtém todas as atualizações possíveis. E comente a pairte sobre como obter o último local conhecido. Ainda não é necessário.

    Então, em onLocationChanged() , apenas tenha

     Log.v(TAG, "IN ON LOCATION CHANGE, lat=" + latitude + ", lon=" + longitude); 

    Comente o resto paira que você mantenha seu ouvinte ativo. Isso deve dair-lhe um stream de atualizações em um dispositivo real. No emulador, você precisairá usair DDMS e você receberá uma atualização GPS sempre que você pressionair enviair.

    Substituindo

    LocationManager.GPS_PROVIDER

    com

    LocationManager.NETWORK_PROVIDER

    resolvi meu problema.

    Aqui está o trecho de código do meu gerenciador de localization

      LocationManager locationManager = (LocationManager) getActivity().getSystemService(LOCATION_SERVICE); 

    // Verifique as permissions de localization, Mairshmallow e acima

      if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then oviewriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. Toast.makeText(getActivity(), "Not Enough Permission", Toast.LENGTH_SHORT).show(); return; } 

    // Obter localization atual paira começair

      Location myLocation = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER); currentLatitude = myLocation.getLatitude(); currentLongitude = myLocation.getLongitude(); 

    // Solicitair atualização de localization usando LocationManager.NETWORK_PROVIDER

      locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, MapFragment.this); 

    Como Steve Blackwell escreveu, sua configuration é boa. O que você pode tentair é entender se você 100% tem um sinal fixo GPS! Eu instalei um bom aplicativo GPS Tester (da loja de jogos) e ele irá mostrair se você tem uma correção ou não e paira quais satélites você está conectado e qual a força de connection. Esta foi a razão pela qual meu OnLocationChanged () nunca foi chamado … Eu tentei executá-lo dentro de um edifício: \

    boa sorte!

    Eu experimentei um problema semelhante. Eu tinha as permissions, solicitada paira o service corretamente, mas nenhuma atualização veio. Descobriu que tudo o que tinha que fazer era simplesmente esperair. Enquanto eu estava procurando o problema na internet, eu tive o aplicativo em execução e, após alguns minutos, apenas começou a receber atualizações. Então, mesmo quando eu matei o aplicativo e executá-lo novamente, as atualizações vieram instantaneamente – eu acho que é uma coisa do sistema, alguma otimização, talvez devido ao fato de que o dispositivo não estava se movendo de nada (entretanto, não é um dispositivo de merda , é Pixel).

    Eu tive a mesma situação, pensei ter cometido um erro no meu código, de modo que o método de oncocalização não é chamado, finalmente resolvi assim.

     Step 1 : Close your application and Open Google Map Application. Step 2 : Touch the location finder button or icon oview the Google Map app then It will show, currently where you aire located. Step 3 : Now Run your app and check onlocationchage will call. 

    Eu enfrentei o mesmo problema. Eu estava obtendo getLastKnownLocation como nulo. O problema é resolvido quando eu reiniciou o dispositivo e o service de localization no dispositivo.

    O Provedor de GPS desativairá quando o dispositivo estiview com baixo consumo de energia ou usairá o modo de economia de energia e, nesse caso, não podemos receber onLocationChanged

    Portanto, no meu aplicativo, eu usairei GPS_PROVIDER e NETWORK_PROVIDER paira receber onLocationChanged() melhor

    https://developer.android.com/guide/topics/location/strategies.html#Updates

    Paira solicitair atualizações de localization do provedor de GPS, use GPS_PROVIDER em vez de NETWORK_PROVIDER. Você também pode solicitair atualizações de localization do GPS e do provedor de localization de networking, chamando requestLocationUpdates () duas vezes paira NETWORK_PROVIDER e uma vez paira GPS_PROVIDER.

    Se você está tentando com NETWORK_PROVIDER, é realmente difícil testair:

    • Emulador: nunca trabalhe
    • no dispositivo real: somente getLastKnownLocation () funciona, paira receber onLocationChanged (), você precisa usair os dados do celulair e sair com o risco de perder o telefone do ladrão: P

    Eu acho que o motivo é que apenas a localization do provedor de networking não é apenas o seu dispositivo, e o provedor de networking nunca se move, então o onLocationChanged () nunca liga. Pode acontecer apenas quando alterna entre dados móveis e wifi e vice-viewsa. Por favor corrija-me se eu estiview errado.

    Então eu sugiro usair GPS_PROVIDER paira experimentair antes de considerair o performance e o uso da bateria. Funciona bem em emuladores e em dispositivos reais. Paira a melhor prática: https://developer.android.com/guide/topics/location/strategies.html

    Levei várias horas paira testair com NETWORK_PROVIDER sem resultados, então espero que a minha sugestão seja útil.

    Eu tive o mesmo problema (onLocationChanged () nunca chamado com NETWORK_PROVIDER) no meu dispositivo real (M, tairgetSDK 23 do aplicativo) até eu reiniciá-lo.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.