Neue Permission Und Berechtigungsabfrage

wer112

Top Contributor
Ich möchte das ein Entwickler in mein AppStore Apps spenden kann, dafür muss man die App aus den EXTERNAL Storge holen.
Leider weiß ich jetzt nicht wie man die Abfrage mit dem Erlauben anstellt(Mache das zwar sehr sehr selten). DAs muss alles Im Dialog gemacht werden. Jetzt habe ich ein YT Video angeschaut und die benutzten für Android 11 eine andere Permission.

Ich müsste System abhägig zwei Abfragen machen jenachddem welche AV man hat(Abfrage unbekannt).

- bis wann wird die Berechtigung: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> erteilt?
die neue PREMMISSION: <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
wird nicht als Vorschlag angezeigt, wie es aussieht ab Android 11.
- WIe mache ich eine Abfrage von den unterschiedliche Versionen und mit mehreren Berechtigungsabfragen?
und das alles im Dialog.


- was ist scoped Storage, geht trotzdem Das <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
?


Auf dieser Seite erfahre ich nicht, ob das normale storge abgesetzt wurden ist:

Ich hoffe ihr könnt mir das alles erklären und mir beim Code(AV abhänginge if Schleife mit beiden Berechtigungsabfragen im Dialog.)helfen?

Ich danke mich im voraus!
 

Jw456

Top Contributor
Ab Andoid 11 bleibt dir nur SAF für das was du vorhast.
Das ist ja keine Medien Datei also ist MediaProvider schon mal raus.

Und du musst natürlich vorher abragen unter welcher Android version der User gerade arbeitet und dann den etsptsprechenden Code dafür benutzen.

Ein Code für alle APIs gibtt es nicht mehr.
 

wer112

Top Contributor
Ab Andoid 11 bleibt dir nur SAF für das was du vorhast.
was ist SAF?
Das ist ja keine Medien Datei also ist MediaProvider schon mal raus.

Und du musst natürlich vorher abragen unter welcher Android version der User gerade arbeitet und dann den etsptsprechenden Code dafür benutzen.
Das will ich ja auch machen abfragen und dann die beiden Berechtigung abfragen, weiß nicht wie das genau geht.
Ein Code für alle APIs gibtt es nicht mehr.
 

Jw456

Top Contributor
Das will ich ja auch machen abfragen und dann die beiden Berechtigung abfragen, weiß nicht wie das genau geht.
Die kannst du dir ja unabhängig der SDK Version holen.
Das hatten wir ja schon mal.


Aber ob du die unter Android 11 überhaupt noch brauchst kann ich jetzt nicht genau sagen. Wenn ja dann nur für den echten externen Speicher , zb Usb Stick oder externe SD-Karte. Für die Emulierte glaube nicht.




Auch wenn du die Perimission vom User bekommst, ändert das nichts daran das du ab A11 nicht mehr mit den einfachen üblichen File Operation Zugriff bekommst. Dann ist SAF angesagt.

PS: Info wann und wo du Berechtigungen brauchst.
 
Zuletzt bearbeitet:

wer112

Top Contributor
Die kannst du dir ja unabhängig der SDK Version holen.
Das hatten wir ja schon mal.


Aber ob du die unter Android 11 überhaupt noch brauchst kann ich jetzt nicht genau sagen. Wenn ja dann nur für den echten externen Speicher , zb Usb Stick oder externe SD-Karte. Für die Emulierte glaube nicht.




Auch wenn du die Perimission vom User bekommst, ändert das nichts daran das du ab A11 nicht mehr mit den einfachen üblichen File Operation Zugriff bekommst. Dann ist SAF angesagt.

PS: Info wann und wo du Berechtigungen brauchst.
Ich versuche das irgendwie hinzubekommen, mir wird die 100 und requestPermission rot unterstrichen, gibt es nur bis Android M.

Habe das so gemacht:

Java:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R){
                    Toast.makeText(getActivity(), "Deine Android version ist kleiner als 11", Toast.LENGTH_SHORT).show();

                    if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){

                    }else{
                        requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, 1000});
                    }

                } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                    Toast.makeText(getActivity(), "Größer als 11", Toast.LENGTH_SHORT).show();


                }
            }

Aber die wollen nochmal eine Versions Code haben:

Java:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                            requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, 1000});
                        }

Was mache ich außerhalb des M?
 

Jw456

Top Contributor
Java:
requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1000);
 

wer112

Top Contributor
bitte eine Runde Klammer keine Geschweifte ")" nicht "}"
Im Dokument steht das:
else {
// You can directly ask for the permission.
requestPermissions(CONTEXT
,
new String[] { Manifest.permission.REQUESTED_PERMISSION
},
REQUEST_CODE
);

Also mit geschweiften Klammer.
Ich probiere ohne die, sondern mit runden.

requestPermissions(getActivity(), new String[](Manifest.permission.READ_EXTERNAL_STORAGE, 1000));

Wird trotzdem rot makiert auch wenn ich die Version Codes wieder drinnen habe
 

wer112

Top Contributor
Java:
requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1000);
ja und was steht bei dir?


lese und schaue richtig wo die geschfeifte Klammer hin muss.
Ich habe es jetzt das so gemacht(ohne die weiteren Version Codes Abfrage):
Java:
//Berechtigung erfragen

                if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R){
                    Toast.makeText(getActivity(), "Deine Android version ist kleiner als 11", Toast.LENGTH_SHORT).show();

                    if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){

                    }else{

                            requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1000);

                    }

                } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                    Toast.makeText(getActivity(), "Größer als 11", Toast.LENGTH_SHORT).show();


                }

Da wird mir requestPermissons rot angestrichen und die wollen eine Methode Haben....
 

Jw456

Top Contributor
Zuletzt bearbeitet:

Jw456

Top Contributor
tipp https://developer.android.com/refer...(android.app.Activity,java.lang.String[],int)

System erlauben, den Berechtigungsanforderungscode zu verwalten​

Damit das System den Anforderungscode verwalten kann, der mit einer Berechtigungsanfrage stellen, fügen Sie Abhängigkeiten von den folgenden Bibliotheken in Ihrem build.gradle-Moduls des Moduls:



Sie können dann eine der folgenden Klassen verwenden:


 
Zuletzt bearbeitet:

wer112

Top Contributor
Na dann schaue doch h mal wo In welcher Klasse es die Methode gibt.
Oder unter welchen Kontext, du bist so wie es ausschaut in einem Fragment.
Gibt die da ?
Wo unter welchen Kontext gibt es sie?

Unter welchen Kontext ist das Beispiel?
Überlege dann solltest du selber drauf kommen.
Warum AS eine Methode erstellen will. Was hier Falsch ist.


Ich verstehe nicht, was du sagst. Laut DOKU(https://developer.android.com/training/permissions/requesting?hl=de)
wird keine Version Codes Abfrage gemacht und außerdem gibt es keine Methode dafür, es steht nur da:

Java:
if (ContextCompat.checkSelfPermission(
        CONTEXT

, Manifest.permission.REQUESTED_PERMISSION

) ==
        PackageManager.PERMISSION_GRANTED) {
    // You can use the API that requires the permission.
    performAction(...);
} else if (ActivityCompat.shouldShowRequestPermissionRationale(
        this, Manifest.permission.REQUESTED_PERMISSION

)) {
    // In an educational UI, explain to the user why your app requires this
    // permission for a specific feature to behave as expected, and what
    // features are disabled if it's declined. In this UI, include a
    // "cancel" or "no thanks" button that lets the user continue
    // using your app without granting the permission.
    showInContextUI(...);
} else {
    // You can directly ask for the permission.
    requestPermissions(CONTEXT

,
            new String[] { Manifest.permission.REQUESTED_PERMISSION

 },
            REQUEST_CODE

);
}

Deswegen wundere ich mich ja über diese neuen Methoden, da nixs im DOKU als Beispiel steht.
 

wer112

Top Contributor
Na dann schaue doch h mal wo In welcher Klasse es die Methode gibt.
Oder unter welchen Kontext, du bist so wie es ausschaut in einem Fragment.
Gibt die da ?
Wo unter welchen Kontext gibt es sie?

Unter welchen Kontext ist das Beispiel?
Überlege dann solltest du selber drauf kommen.
Warum AS eine Methode erstellen will. Was hier Falsch ist.


Ich habe den Code von einem anderen Teil Kopiert, Ich weiß nicht, wie ich zwei Berechtigungen Prüfen kann(MANAGE_EXTERNAL_STORAGE)

Mein Jetziger Code:
Java:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R){
                    Toast.makeText(getActivity(), "Deine Android version ist kleiner als 11", Toast.LENGTH_SHORT).show();

                    if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){

                    }else{
                            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1000);


                    }

                } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                    Toast.makeText(getActivity(), "Größer als 11", Toast.LENGTH_SHORT).show();

                    if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED ){

                    }else{
                        ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1001);


                    }

                }

Wie kann ich eine zweite Abfrage mit reinmachen?
 

Jw456

Top Contributor
Erstmal ist es für mich sinn los auf Version < R zu prüfen und wenn das nicht erfüllt ist ein else If mit >= R zu prüfen.
In dem else macht du auch nichts anders als beim True (redundanter Code).


Mehre Permissioen zu gleich abfragen du hast ja ein String Array da kannst u ja mehre rein packen.
Dann schaue nochmal Post #15
Vielleicht die Methode RequestMultiplePermissions
 
Zuletzt bearbeitet:

Jw456

Top Contributor
Java:
 ActivityCompat.requestPermissions(
                    this,
                    new String[]{
                            Manifest.permission.WRITE_EXTERNAL_STORAGE,
                            Manifest.permission.READ_EXTERNAL_STORAGE
                    },
                    STORAGE_PERMISSION_CODE
            );
 

Jw456

Top Contributor
MANAGE_EXTERNAL_STORAGE

Du weißt schon das du da für eine Begründung bei Google abgeben musst. Um den Zugriff auf den gesamten Speicher zu erhalten. Ohne dieser wirst du nicht weiter kommen.
Deine App wird auch aus dem play store entfernt. Auch ohne Playstore wird das ohne den Schlüssel von Google nichs werden.

Also was ich schon sagte ab R ist SAF angesagt.
Du willst ja auch nur eine Datei oder einen Ordner und nicht Zugriff auf die ganze Sdkarte.
 

Oben