Ein paar Fragen zu Permissions...

lordzwieback

lordzwieback

Erfahrenes Mitglied
210
Hallo,

ich habe ein paar Fragen zu Permissions und deren Festlegung. Ich benötige in meiner App Zugriff auf den Speicher des Smartphones. Also hab ich schon vor einiger Zeit diese Zeilen in meiner Manifest.xml hinzugefügt:
Code:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Damals bin ich davon ausgegangen, dass es das war. Ich hatte beim Starten von meiner App eine Abfrage, ob der Programmordner schon da ist, falls nicht, sollte er erstellt werden. Das hat ewig nicht funktioniert, weil ich erst einige Zeit später folgendes herausgefunden habe: Ich muss die Berechtigung bei einer frischen Installation IMMER unter Einstellungen - Apps - [Appname] - Berechtigung setzen. Einmal gesetzt, war das dann auch kein Problem mehr - bis ich die App mal neu installiere.

Seit Android 6 (?) kann man ja Anfragen nach Berechtigungen beim Ausführen der App einbauen. Da ich aber nicht weiß, ob jemand, der die App benutzt auch gleichzeitig Android 6 oder höher hat... das ist mir ein wenig zu riskant.

Also habe ich mir folgendes überlegt:
Beim ersten Start nach der Installation erscheint ein AltertDialog mit einem Button "test" drauf. Nach einigem Googlen fand ich heraus, dass ich bestimmte Einstellungsformulare von Android per Intent aufrufen kann. Das habe ich dann mal so getestet:
Code:
startActivity(new Intent(Settings.ACTION_APPLICATION_SETTINGS));
Das hat super funktioniert, aber war noch nicht ganz, was ich eigentlich wollte. Mit dem Befehl oben komme ich ins Menü Einstellungen -> Apps, ich bräuchte aber Einstellungen -> Apps -> MeineApp (->Berechtigung?).

Ich also weitergesucht und bin auf folgenden Befehl gestoßen:
Code:
startActivity(new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS));
Dieser Code bringt meine App zum Abstürzen. Wenn ich den befehl in einen try/catch Block stecke und mir die Fehlermeldung ausgeben lasse, erscheint das:
E/MainActivity: Error: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.APPLICATION_DETAILS_SETTINGS }

Wieso funktioniert das beim einen, aber nicht beim anderen Befehl? Hat jemand vielleicht eine bessere Idee, mein Problem zu lösen? Schonmal danke für eure Tipps.

Grüße,
lordzwieback
 
Halo Lord,

bau einfach das hier in deine Activity ein (onCreate()) , die mit den MAIN/LAUNCH Intents in der Manifest angegeben ist

Code:
        if (ContextCompat.checkSelfPermission(mActivity,Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

       
            if (ActivityCompat.shouldShowRequestPermissionRationale(mActivity,Manifest.permission.READ_EXTERNAL_STORAGE))
            {
            }
            else
            {
             ActivityCompat.requestPermissions(mActivity,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},23142);
            }
        }

Du kannst ja dir das Ganze erweitern

Eine Abfrage , ob du unter M bist, benötigst du nicht
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: lordzwieback
@swa00 Danke für deine Antwort. Hat zwar etwas länger gedauert, bis ich alles verstanden habe, war gestern aber auch recht spät geworden. :D Das Ganze geht ja so ähnlich wie bei den AsyncTasks. Habe es nun folgendermaßen gelöst:

Habe die Abfrage, ob die Permission, die ich brauche, schon aktiv ist an die Stelle gesetzt, an welcher ich sie benötige (Beim Abfragen, ob Ordner erstellt werden soll).
Code:
// ask for permissions if they arent granted
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}

Danach die Methode onRequestPermissionsResult eingebunden:
Code:
@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 1: {
                Log.d(TAG, "PERMISSION TO WRITE TO EXTERNAL STRORAGE GRANTED!");
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    final File programFolder = new File(Environment.getExternalStorageDirectory() + "/ProgrammOrdner");
                    if(!programFolder.exists() && !programFolder.isDirectory()) {
                        try {
                            Boolean foldercreated = programFolder.mkdirs();
                            Log.d(TAG, "Folder created: " + foldercreated);
                        } catch (Exception e) {
                            Log.e(TAG, "Error creating folder:" + e);
                        }
                    }
                } else {
                    Log.d(TAG, "PERMISSION TO WRITE EXTERNAL STRORAGE DENIED!");
                   // Hier entsteht noch ein Hinweis, dass Permission nicht gesetzt wurde und deshalb der Ordner nicht erstellt werden konnte...
                }
                break;
            }
        }
    }

Funktioniert wunderbar. Vielen Dank für den Tipp.
 
Gern geschehen ..
Ist dein chef schon zufrieden ? :)
 
@swa00 Ich hoffe es doch. Bisher kam kein negatives Feedback.

Mal abgesehen davon bin ich selbst mehr als zufrieden mit meinem Fortschritt, das zählt. :D
 
Mal abgesehen davon bin ich selbst mehr als zufrieden mit meinem Fortschritt, das zählt.

Jupp, du bist einer der seltenen Exemplare hier , die das auch umsetzt , was man ihnen vor die Füsse schmeisst,
DAMIT sie lernen und nicht ein "Vorkauen" und Präsentation auf dem silbernen Tablet "einfordern" :)

Dann macht es auch Spass , seine Erfahrung weiter zu geben .
 
  • Danke
Reaktionen: lordzwieback
Freut mich, das zu hören. :)
 
... ist eh alles "Gelb" in der Liste der Anfragen :)
NICHT zu übersehen :)
 
  • Danke
Reaktionen: lordzwieback

Ähnliche Themen

A
Antworten
1
Aufrufe
580
swa00
swa00
SpeedySix
Antworten
13
Aufrufe
1.398
jogimuc
J
wernho
Antworten
11
Aufrufe
676
wernho
wernho
Zurück
Oben Unten