Hallo Stefan,
Die Mitteilung "Call requires permission which maxy be rejected by user:....." sehe zu allen Zeilen, die den LocationManager ansprechen. Evtl. hat das auch nichts zu sagen und ich interpretiere das Verhalten des Telefons falsch.
Der oben aufgeführte Code ist die gesamte Funktion. Es gibt aber noch ein paar in der Klasse.
ich befürchte, dass der Fehler doch woanders ist.
Deshalb Kopiere ich mal die ganze Klasse in den Post.
Ich nehme keine Provider Daten, da das Telefon ein Ausrangiertes meiner Kinder ist und ich dieses ohne SIM-Karte benutze. Halt nur für solche Spielerein/Zum Programmieren lernen.
Ich habe mal in den Link geschaut. Aber ich befürchte, ich brauche Wochen um das zu verstehen.
Vielen Dank für Deine Hinweise.
Holger
public class GPSAbstand implements LocationListener {
private final Context c;
//Variable, zum speichern, ob GPS aktiv ist
private boolean GPSaktiv = false;
//Die Variable Location wird später benötigt und beinhaltet den Längen- und Breitengrad
private Location position;
//Die Variable LocationManager wird später benötigt und ermöglicht die Positionsbestimmung
protected LocationManager locationManager;
public GPSAbstand(Context context) {
this.c = context;
}
public void setPosition() {
locationManager = (LocationManager) c.getSystemService(c.LOCATION_SERVICE);
//ließt den GPS Status aus (Aktiv = Ja/Nein)
GPSaktiv = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (GPSaktiv) {
if (position == null) {
//Bestimmung der GPS Position, sofern GPS eingeschaltet ist. Die Daten werden später in der Variable "position" gespeichert.
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 10, this);
if (locationManager != null) {
position = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
}
}
}
//Beendet GPS Bestimmung
public void stopGPSposition(){
if(locationManager != null){
locationManager.removeUpdates(GPSAbstand.this);
}
}
//Gibt den Breitengrad als Double zurück
public double getBreitengrad(){
if (position != null){
return position.getLatitude();
}else{
return 0;
}
}
//Gibt den Längengrad als double zurück
public double getLaengengrad(){
if(position != null){
return position.getLongitude();
}else{
return 0;
}
}
//Gibt zurück, ob GPS eingeschaltet ist (true oder false)
public boolean istGPSaktiv() {
return this.GPSaktiv;
}
public void onResume(){
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 10, this);
}
@Override
public void onLocationChanged(Location location) {
position = location;
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
//Gibt den Abstand zwischen dem Ziel und der Position als double zurück
public static double calcAbstand(double laengengrad, double breitengrad, double ziellaengengrad, double zielbreitengrad){
double lat;
double dx;
double dy;
double distance;
lat = (breitengrad + ziellaengengrad) / 2 * 0.01745;
dx = 111.3 * Math.cos(lat) * (laengengrad - zielbreitengrad);
dy = 111.3 * (breitengrad - ziellaengengrad);
distance = Math.sqrt(dx * dx + dy * dy);
return distance;
}
//Gibt den Abstand zwischen dem Ziel und der Position als double zurück mit Android tools
public static double calcAbstand2(double laengengrad, double breitengrad, double ziellaengengrad, double zielbreitengrad) {
Location a = new Location("Standort");
a.setLatitude(laengengrad);
a.setLongitude(breitengrad);
Location b = new Location("Ziel");
b.setLatitude(laengengrad);
b.setLongitude(breitengrad);
return a.distanceTo(b);
}
}
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.