Rechte um Positionsdaten zu lesen

  • Antworten:20
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 108

15.05.2019, 18:42:28 via Website

Hallo zusammen

Ich möchte auf die Positionsdaten meines Handys zugreifen. Für neuere Android Versionen muss geprüft werden ob diese Rechte vorhanden sind. Wenn sie nicht vorhanden sind dann erteile ich sie mit der folgenden Anweisung:

ActivityCompat.requestPermissions(MainActivity.this,
               new String[]{ACCESS_FINE_LOCATION},
               200);

Der dritte Parameter bereitet mir aber Bauchschmerzen. Ich habe im Internet gesucht und diverse Antworten gesehen. Aber nur die 200 funktioneirt.

Nun meine Frage ist die 200 Korrekt oder gibt es eine bessere Lösung?

Gruss Renato

Diskutiere mit!
Beste Antwort
  • Forum-Beiträge: 720

21.05.2019, 14:24:46 via Website

Am einfachsten prüfst du vorher ob du die Methode ausführen musst. Also ob du die permission zur Laufzeit erfragen musst, welche android Version du hast.
Wenn nicht machst du einfachch weiter.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// permissions zu Laufzeit erfragen
// wenn vorhanden weiter im Code
}
else {
// android Version kleiner als 6 weiter ohne permission zur Laufzeit

}

— geändert am 21.05.2019, 14:35:18

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 720

15.05.2019, 19:23:20 via Website

Hallo diese eine Zeile reicht nicht aus das ist nur ein kleiner Teil des Codes was du brauchst. Das wurde dir auch in deinen vorherigen thread gesagt.

Du brauchst den kompletten Code von der doku.

Schaue hier.

https://developer.android.com/training/permissions/requesting

Die 200 ist der requestCode der in der Methode

onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults)

geschickt wird und du somit weißt wer die Methode aufgerufen hat.

— geändert am 15.05.2019, 19:33:50

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 720

15.05.2019, 20:45:35 via Website

Von mir auch noch ein Link zu einer lib von github. Die ich benutze.
https://github.com/00ec454/Ask

@Pascal toll du hast den link korrigiert.
Ist im großen und ganzen der Code der offiziellen Doku.
Mit der Doku mein erster link hätte es eigentlich auch reichen müssen. Gut hier hat er ein echtes Beispiel.

So nun denke ich hat er genug Möglichkeiten.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 108

15.05.2019, 21:52:19 via Website

Danke für die ausführliche Hilfe. Ich werde mir mal alles in Ruhe anschauen.

Ich bin da wohl auf den falschen Dampfer gestiegen. Was ich eigentlich wollte ist, dass wenn die Rechte nicht vorhanden sind die rechte erteilen. Dies habe ich mit einem AlertDialog gemacht. Wenn der Nutzer die Rechte noch nicht zugeteilt hat, dann kann er im Dialog entscheiden ob er sie zuteilen möchte oder nicht. Falls ja möchte ich die Rechte der App geben.

 DialogInterface.OnCancelListener positivListener = new DialogInterface.OnCancelListener() {
   @Override
   public void onCancel(DialogInterface dialog) {
       //Rechte erteilen
       ActivityCompat.requestPermissions(MainActivity.this,
               new String[]{ACCESS_FINE_LOCATION},
               200);
       dialog.dismiss();
   }

};

In einem bin ich mir sicher so geht es nicht. Vielleicht kriege ich die Lösung aus den Beispielen raus oder kann mir jemand gleich sagen wie es geht?

Gruss Renato

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 3.163

15.05.2019, 22:01:13 via Website

Robert , ganz vereinfacht :

Du benötigst bei der richtigen Anfrage keinen eigenen Dialog - das macht das System für dich.

Hier ein erweitertes Beispiel :

public class PermissionActivity extends Activity
{
String[] permissions= new String[]
{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE
};
//////////////////////////////////////////////////////////////////////////////////
private boolean checkWritePermissions()
{
int result;
List listPermissionsNeeded = new ArrayList<>();
for (String p:permissions)
{
result = ContextCompat.checkSelfPermission(this,p);
if (result != PackageManager.PERMISSION_GRANTED)
{
listPermissionsNeeded.add(p);
}
}
if (!listPermissionsNeeded.isEmpty())
{
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]),MULTIPLE_PERMISSIONS );
// keine permissions gesetzt
return false;
}
// als permissions gesetzt
return true;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
@Override
public void onRequestPermissionsResult(int requestCode, String permissionsList[], int[] grantResults)
{
switch (requestCode)
{
case MULTIPLE_PERMISSIONS:
{
if (grantResults.length > 0)
{
String permissionsDenied = "";
for (String per : permissionsList)
{
if(grantResults[0] == PackageManager.PERMISSION_DENIED)
{
permissionsDenied += "\n" + per;
}
}
// Nach dem ersten Male
}
return;
}
}
}

@Pascal : Tritt bitte mal den Web-Jungs hinten rein , die sollen ein vernünftiges "SourceCode-Plugin" installieren .. Das hier ist ja ein mega Krampf :-)

— geändert am 15.05.2019, 22:03:30

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 720

15.05.2019, 22:02:23 via Website

Hallo also schaue dir doch bitte die Doku an mein erster link. Da ist alles enthalten. Da brauchst du keinen eigenen Dialog.

Oder schaue und arbeite den ersten link

von pascal durch.

Vergiss das mit dem eigenen Dialog.

Halte dich an die Doku da steht eigentlich alles dri drin.

@saw00 wie sollen wir das eigentlich verstehen. :(

Tritt bitte den Web-Jungs hinten rein , die sollen endlich mal ein vernünftiges "Code-Plugin" installieren .. Das hier ist ja ein mega krampf  goes here

— geändert am 15.05.2019, 22:07:56

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 720

15.05.2019, 22:20:36 via Website

Falls ja möchte ich die Rechte der App geben.

Du kannst der app nicht die Rechte geben Das kann nur der User. Und wenn du request Permissions aufrufst wird der Dialog von Android selber erstellt und angezeigt.
Die ant Wort von User kommt in der onRequestPermissionsResult Methode an in der du dann weiter machst je nachdem wie er sich entschieden hat.

Das sollte aber nun wirklich reichen.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 3.163

15.05.2019, 22:51:09 via Website

Das sollte aber nun wirklich reichen.

Denke ich auch

@saw00 wie sollen wir das eigentlich verstehen. :(
Tritt bitte den Web-Jungs hinten rein , die sollen endlich mal ein vernünftiges "Code-Plugin" installieren .. Das hier ist ja ein mega krampf

Das war mal der Wunsch an Pascal sich darum zu kümmern , dass wir ein wenig komfortabler Source Codes einstellen können:-)

Und an dich lieber Jokel :- Du schreibst jetzt 100 mal swa00, swa00, swa00 NICHT saw00 :-)
Ich bekomme sonst nämlich nicht mit , dass du mich zitierst , weder hier, noch bei AH :-)

So , bin jetzt mal im Bett - gute nacht ......

— geändert am 15.05.2019, 22:52:25

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.400

15.05.2019, 23:37:45 via Website

@Stefan: Hab ich auch schon angemerkt, da das Forum aber eine Eigenentwicklung ist, werden schon Fertige Lösungen nicht direkt integriert werden können.
Ich werde es beim nächsten mal trotzdem wieder in den Raum werfen ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 720

16.05.2019, 07:19:40 via Website

@swa00 Sorry für den Tipp Fehler. (lightbulb)

Ich bin meistens nur am Handy.
Das Handy hat sich wohl meine Fehler gemerkt.

Das mit dem Posten von Code habe ich auch schon mal angemeckert.

Da sollten wir wohl einen neuen Thread im Bereich Admins machen. Wenn es genügend Meinungen und auch etwas protest gibt dann sind wohl die "Chefs" Anmins wider bereit etwas mehr Programmierarbeit in das Forum zu stecken.

Noch mal sorry für Tippfehler :)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 108

19.05.2019, 11:50:35 via Website

Ciao Stefan

Ich habe mal dein Beispiel erarbeitet. Eine Frage habe ich noch dazu. "MULTIPLE_PERMISSIONS" ist eine Konstante mit einem beliebigen Integer Wert. Ist das so richtig?

Gruss Renato

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 720

19.05.2019, 14:26:01 via Website

Hallo ja in dem Code von @Stefan ist "MULTIPLE_PERMISSIONS" eine Kostante.
In Java schreibt man Kontanten in gross Buchstaben.

public static final int MULTIPLE_PERMISSIONS = 1234;

Java Namenskonventionen

https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&cad=rja&uact=8&ved=2ahUKEwjVufLOyqfiAhXSw6YKHbj7DPoQFjAEegQIAhAC&url=https%3A%2F%2Fwww.techfak.uni-bielefeld.de%2Fags%2Fpi%2Flehre%2FAuDIISS02%2Fstyle_guide.pdf&usg=AOvVaw04G19tvIsfvC4GG7WaMqA3

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 108

20.05.2019, 21:56:44 via Website

Ciao Stefan

Ich habe mal dein Beispiel umgesetzt. Wenn ich nun das Programm auf meinem Handy starte, dann ist die Methode "checkWritePermissions" immer false.

Ich habe ein Samsung Galaxy note 3 mit Android 5.3. Liegt das Problem an meinem Handy oder mache ich was falsch?

Gruss Renato

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 3.163

20.05.2019, 23:06:08 via Website

Hallo Renato,

erst ab Marshmellow (>=6.x) wird das benötigt

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 108

21.05.2019, 08:49:36 via Website

Ciao Stefan

In diesem Fall muss ich von meiner App zwei unterschiedliche Versionen machen? Oder ist es möglich zu erkennen mit welcher Version die App ausgeführt wird.

Gruss Renato

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 3.163

21.05.2019, 09:02:56 via Website

Hallo Renato,

in den oben genannten Links steht alles zu deinen Fragen drin - deshalb haben wir sie dir auch gegeben.
Solche Links sind für uns Standardlektüre - ansonsten könnten wir Dir auch keine Antworten geben.

Ein "must have" für jeden Entwickler

Lies dich mal bitte dazu ein - es gibt sogar auch ein Video

— geändert am 21.05.2019, 09:04:48

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Diskutiere mit!
Beste Antwort
  • Forum-Beiträge: 720

21.05.2019, 14:24:46 via Website

Am einfachsten prüfst du vorher ob du die Methode ausführen musst. Also ob du die permission zur Laufzeit erfragen musst, welche android Version du hast.
Wenn nicht machst du einfachch weiter.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// permissions zu Laufzeit erfragen
// wenn vorhanden weiter im Code
}
else {
// android Version kleiner als 6 weiter ohne permission zur Laufzeit

}

— geändert am 21.05.2019, 14:35:18

Hilfreich?
Diskutiere mit!
Empfohlene Artikel