2017-10-24 8 views
0

Ich möchte den Wert von Längen- und Breitengrad meines aktuellen Standorts offline abrufen und den aktuellen Standort in seiner Datenbank speichern. Ist es möglich, den Längen- und Breitengrad des Geräts zu erhalten, wenn mobile Daten und WLAN ausgeschaltet sind, aber das GPS eingeschaltet ist?Standort offline abrufen

+0

Ja, Sie können. Die normale Standort-Listener-Klasse selbst funktioniert. aber Sie können diese Werte nicht ohne Internet auf Ihre Server oder DB aktualisieren. –

+0

Hallo @RakeshPolo, vielen Dank für Ihren Kommentar, ich möchte nur den aktuellen/Echtzeit-Speicherort und speichern Sie es in der Datenbank – MNGorospe

+0

Sie können es auf der physischen Datenbank Ihres Geräts speichern. –

Antwort

1

Verwenden Sie einfach diesen Code. Stellen Sie sicher, dass der Benutzer nicht nur die Option "Nur WLAN" oder "Nur Netzwerk" in seinen Standorteinstellungen ausgewählt hat. es muss eine hohe Genauigkeit oder nur GPS sein. Dieser Codeabschnitt wird funktionieren.

public class Location extends AppCompatActivity { 
LocationManager locationManager; 
Context mContext; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_location); 
    mContext=this; 
    locationManager=(LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
      2000, 
      10, locationListenerGPS); 
    isLocationEnabled(); 

} 

LocationListener locationListenerGPS=new LocationListener() { 
    @Override 
    public void onLocationChanged(android.location.Location location) { 
     double latitude=location.getLatitude(); 
     double longitude=location.getLongitude(); 
     String msg="New Latitude: "+latitude + "New Longitude: "+longitude; 
     Toast.makeText(mContext,msg,Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 

    } 
}; 


protected void onResume(){ 
    super.onResume(); 
    isLocationEnabled(); 
} 

private void isLocationEnabled() { 

    if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
     AlertDialog.Builder alertDialog=new AlertDialog.Builder(mContext); 
     alertDialog.setTitle("Enable Location"); 
     alertDialog.setMessage("Your locations setting is not enabled. Please enabled it in settings menu."); 
     alertDialog.setPositiveButton("Location Settings", new DialogInterface.OnClickListener(){ 
      public void onClick(DialogInterface dialog, int which){ 
       Intent intent=new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       startActivity(intent); 
      } 
     }); 
     alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){ 
      public void onClick(DialogInterface dialog, int which){ 
       dialog.cancel(); 
      } 
     }); 
     AlertDialog alert=alertDialog.create(); 
     alert.show(); 
    } 
    else{ 
     AlertDialog.Builder alertDialog=new AlertDialog.Builder(mContext); 
     alertDialog.setTitle("Confirm Location"); 
     alertDialog.setMessage("Your Location is enabled, please enjoy"); 
     alertDialog.setNegativeButton("Back to interface",new DialogInterface.OnClickListener(){ 
      public void onClick(DialogInterface dialog, int which){ 
       dialog.cancel(); 
      } 
     }); 
     AlertDialog alert=alertDialog.create(); 
     alert.show(); 
    } 
} 
} 

Die Parameter requestLocationUpdates Methoden sind wie folgt:

Anbieter: den Namen des Anbieters, mit dem wir registrieren möchten. minTime: Minimales Zeitintervall zwischen Standortaktualisierungen (in Millisekunden). MinDistanz: Mindestabstand zwischen Standortaktualisierungen (in Metern). listener: Ein LocationListener, dessen onLocationChanged (Location) -Methode für jede Standortaktualisierung aufgerufen wird.

Berechtigungen:

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

über Berechtigungen hinzufügen Datei für die Version niedriger als Lutscher und für Eibisch und höhere Version verwendet Runtime Erlaubnis zu manifestieren.

+0

Danke, es funktioniert! – MNGorospe

0

Sie benötigen keine Internetverbindung, um den Wert von Längen- und Breitengrad zu erhalten, aber wenn Sie die vollständige Adresse in Worte fassen oder auf der Karte anzeigen möchten, benötigen Sie nur eine Internetverbindung.

Check this link for better explanation

Verwandte Themen