2015-12-03 3 views
1

, когда я использую gps или wifi onlocationchanged работает нормально, но когда я использую данные для мобильных устройств, onlocationchanged это называется только один раз, и местоположение обеспечивает его плохой.Почему, onlocationchanged нет, он называется при использовании мобильных данных?

Надеюсь, вы можете мне помочь, мне действительно нужно найти место с данными на мобильных устройствах.

это это мой код:

public class ObtenerLatLng implements LocationListener { 

    public static double latitude = 0.0; 
    public static double longitude = 0.0; 
    public static boolean flaglocation=true; 
    int contador; 
    Context context; 
    LocationManager locationManager; 


    public ObtenerLatLng(Context context) { 
     this.context = context; 
     obtenerlatlng(context); 
    } 

    public void obtenerlatlng(Context context) { 


     Log.i("hola ", "Se HA SOLICITADO LOCALIZACION"); 
     NetworkInfo aux; 
     NetworkInfo isWifiOn = null; 
     NetworkInfo isMobiledataOn = null; 



     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      Network[] todas = cm.getAllNetworks(); 

      for (Network item : todas) { 
       aux = cm.getNetworkInfo(item); 
       if (aux.getType() == ConnectivityManager.TYPE_WIFI) { 
        isWifiOn = aux; 
       } 
       if (aux.getType() == ConnectivityManager.TYPE_MOBILE) { 
        isMobiledataOn = aux; 
       } 
      } 

     } else { 
      isWifiOn = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
      isMobiledataOn = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

     } 


     locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
     if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 

      if (isMobiledataOn.isConnected() || isWifiOn.isConnected()) { 
       Toast.makeText(context, "entre a Network", Toast.LENGTH_LONG).show(); 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
        if (context.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && context.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
         locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 1, this); 


        } 
       } else { 
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000, 1, this); 

       } 
      } else if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
       Toast.makeText(context, "entre a gps", Toast.LENGTH_LONG).show(); 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
        if (context.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && context.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

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

        } 
       } else { 

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

       } 

      } 

     } else { 
      flaglocation=false; 
      // Toast.makeText(context, "Revise la configuracion de red", Toast.LENGTH_LONG).show(); 

     } 

    } 


    @Override 
    public void onLocationChanged(Location location) { 

     if (location!= null) { 
      flaglocation=true; 
      Toast.makeText(context, "Se actualizo la localizacion " + location.getLatitude() + " " + location.getLongitude(), Toast.LENGTH_LONG).show(); 
      latitude = location.getLatitude(); 
      longitude = location.getLongitude(); 

     } 

    } 



    } 

}

ответ

0

С мобильными данными вы получите только расположение клеток. См. this о том, как получить местоположение ячейки.

Для получения сетевых или грубых мест Network_provider требуется как минимум WiFi.

+0

нормально, но у меня вопрос, он точнее, чем gps или нет? –

+0

gps более точный, конечно. – cgr

+0

хорошо понимаю, я считал, что gps это более точно, большое спасибо –

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