Come get la posizione grossolana utilizzando Wifi o GSM o GPS, qualunque sia disponibile?

La mia app richiede solo un servizio di localizzazione grossolano quando viene avviato.

In dettaglio, ho bisogno della posizione approssimativa dell'app in modo da fornire agli utenti le informazioni del negozio nelle vicinanze.

  • Android: Come triggersre / disabilitare la connessione WiFi o la connessione a Internet in modo programmato
  • Come si aggiunge una libreria esistente .so a un progetto Android Studio?
  • Android: espandere / crollare l'animation
  • Come posso fare solo paesaggio per tablet e solo ritratto per telefoni?
  • Come risolvere "Errore durante l'archiviazione finale: inserimento duplicato: AndroidManifest.xml"
  • è ansible hide la barra di sistema
  • La posizione NON deve essere aggiornata costantemente. Inoltre, in questo caso sarà sufficiente una localizzazione grossolana.

    Desidero che l'applicazione scelga automaticamente GSM, o wifi, o GPS, qualunque sia disponibile.

    Il servizio di localizzazione dovrebbe essere anche una volta per risparmiare energia telefonica .

    Come posso fare questo?

    Ho provato a utilizzare GPS separatamente.

    Il mio problema è che non so come fermare la funzionalità di posizione sempre aggiornata del GPS. Non so come fare il telefono select uno dei tre methods, sia.

    Alcuni codici o idee di esempio sono molto apprezzati.

  • AndroidRuntime causata da: java.lang.unsatisfiedLinkError: Imansible caricare tfp_jni: findLibrary restituito null
  • allegato di image a una posta .. come in android?
  • progetto android-maven-plugin e biblioteca
  • Come funziona un'animation di traduzioni: Android
  • ACTION_SCREEN_ON e ACTION_SCREEN_OFF non funzionano?
  • WebP per Android
  • 4 Solutions collect form web for “Come get la posizione grossolana utilizzando Wifi o GSM o GPS, qualunque sia disponibile?”

    Ecco un certo punto di vista:

    private void _getLocation() { // Get the location manager LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); Criteria criteria = new Criteria(); String bestProvider = locationManager.getBestProvider(criteria, false); Location location = locationManager.getLastKnownLocation(bestProvider); try { lat = location.getLatitude(); lon = location.getLongitude(); } catch (NullPointerException e) { lat = -1.0; lon = -1.0; } } 

    Ciò potrebbe tuttavia richiedere un accesso FINE_LOCATION. Così:

    Un altro modo è quello di utilizzare questo che utilizza LocationManager .

    Il modo più rapido ansible è quello di utilizzare l'ultima posizione con questo, l'ho usata ed è abbastanza veloce:

     private double[] getGPS() { LocationManager lm = (LocationManager) getSystemService( Context.LOCATION_SERVICE); List<String> providers = lm.getProviders(true); Location l = null; for (int i=providers.size()-1; i>=0; i--) { l = lm.getLastKnownLocation(providers.get(i)); if (l != null) break; } double[] gps = new double[2]; if (l != null) { gps[0] = l.getLatitude(); gps[1] = l.getLongitude(); } return gps; } 

    Questo è un modo

     public class GPSTracker extends Service implements LocationListener { private final Context mContext; // flag for GPS status boolean isGPSEnabled = false; // flag for network status boolean isNetworkEnabled = false; // flag for GPS status boolean canGetLocation = false; Location location; // location double latitude; // latitude double longitude; // longitude // The minimum distance to change Updates in meters private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters // The minimum time between updates in milliseconds private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute // Declaring a Location Manager protected LocationManager locationManager; public GPSTracker(Context context) { this.mContext = context; getLocation(); } public Location getLocation() { try { locationManager = (LocationManager) mContext .getSystemService(LOCATION_SERVICE); // getting GPS status isGPSEnabled = locationManager .isProviderEnabled(LocationManager.GPS_PROVIDER); // getting network status isNetworkEnabled = locationManager .isProviderEnabled(LocationManager.NETWORK_PROVIDER); if (!isGPSEnabled && !isNetworkEnabled) { // no network provider is enabled } else { this.canGetLocation = true; // First get location from Network Provider if (isNetworkEnabled) { locationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); Log.d("Network", "Network"); if (locationManager != null) { location = locationManager .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); } } } // if GPS Enabled get lat/long using GPS Services if (isGPSEnabled) { if (location == null) { locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); Log.d("GPS Enabled", "GPS Enabled"); if (locationManager != null) { location = locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); } } } } } } catch (Exception e) { e.printStackTrace(); } return location; } /** * Stop using GPS listener * Calling this function will stop using GPS in your app * */ public void stopUsingGPS(){ if(locationManager != null){ locationManager.removeUpdates(GPSTracker.this); } } /** * Function to get latitude * */ public double getLatitude(){ if(location != null){ latitude = location.getLatitude(); } // return latitude return latitude; } /** * Function to get longitude * */ public double getLongitude(){ if(location != null){ longitude = location.getLongitude(); } // return longitude return longitude; } /** * Function to check GPS/wifi enabled * @return boolean * */ public boolean canGetLocation() { return this.canGetLocation; } /** * Function to show settings alert dialog * On pressing Settings button will lauch Settings Options * */ public void showSettingsAlert(){ AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); // Setting Dialog Title alertDialog.setTitle("GPS is settings"); // Setting Dialog Message alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?"); // On pressing Settings button alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int which) { Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); mContext.startActivity(intent); } }); // on pressing cancel button alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); // Showing Alert Message alertDialog.show(); } @Override public void onLocationChanged(Location location) { } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public IBinder onBind(Intent arg0) { return null; } } 

    Usalo in questo modo:

     gps = new GPSTracker(PromotionActivity.this); // check if GPS enabled if(gps.canGetLocation()){ double latitude = gps.getLatitude(); double longitude = gps.getLongitude(); }else{ // can't get location // GPS or Network is not enabled // Ask user to enable GPS/network in settings gps.showSettingsAlert(); } 

    Usando questo, è ansible get la migliore posizione disponibile. Spero possa aiutare

    puoi utilizzare LocationClient fornisce un'applicazione di posizione unificata / semplificata (fusione), controlla questo video per materiale introduttivo e background o questa guida per gli sviluppatori

    l'inconveniente principale è che ti fai app dipendendo dall'esistenza di Google Play Services sul dispositivo.

    Per get informazioni da un fornitore specifico, è necessario utilizzare: LocationManager.getLastKnownLocation (provider di stringhe) , se si desidera che l'applicazione seleziona automaticamente tra provider, è ansible aggiungere la scelta del provider con il metodo getBestProvider . Per quanto riguarda la fermata di rinfrescare la posizione GPS, non ho abbastanza cattura. Hai bisogno di get le informazioni sulla posizione una sola volta oppure devi monitorare periodicamente le modifiche di posizione?

    EDIT : A proposito, se vuoi che le informazioni sulla tua posizione siano aggiornate, devi utilizzare il metodo requestSingleUpdate del gestore di località, con i criteri specificati. In questo caso il fornitore dovrebbe anche essere scelto automaticamente

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.