So überprüfen Sie die Berechtigung im Fragment

Lesezeit: 5 Minuten

So uberprufen Sie die Berechtigung im Fragment
S.M_Emamian

Ich möchte eine Berechtigung in einem Fragment überprüfen.

mein Code:

        // Here, thisActivity is the current activity
        if (ContextCompat.checkSelfPermission(getActivity(),
                Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {


            // Should we show an explanation?
            if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
                    android.Manifest.permission.ACCESS_FINE_LOCATION)) {

                // Show an explanation to the user *asynchronously* -- don't block
                // this thread waiting for the user's response! After the user
                // sees the explanation, try again to request the permission.

            } else {

                // No explanation needed, we can request the permission.

                ActivityCompat.requestPermissions(getActivity(),
                        new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                        1);



                // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
                // app-defined int constant. The callback method gets the
                // result of the request.
            }
        }

aber onRequestPermissionsResult nach Zulassen oder Verweigern nicht aufgerufen.

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case 1: {
            Log.e("test","0");
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission was granted, yay! Do the
                // contacts-related task you need to do.
                //yes

                Log.e("test","1");

                Intent intent = new Intent(getActivity(), MapsActivity.class);
                intent.putExtra("latitude", 35.694828);
                intent.putExtra("longitude", 51.378129);
                startActivity(intent);

            } else {
                utilityFunctions.showSweetAlertWarning(getActivity(),r.getString(R.string.str_warning_title_empty),
                        r.getString(R.string.str_you_must_allow_this_permission_toast),
                        r.getString(R.string.str_warning_btn_login));

                Log.e("test","2");
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}

  • Mögliches Duplikat von Laufzeitberechtigungen von v4.Fragment anfordern und Rückruf an Fragment gehen lassen?

    – R. Zagórski

    23. November 16 um 9:40 Uhr

So habe ich es gemacht, bei mir funktioniert es. Danke!

Für Aktivität:

ActivityCompat.requestPermissions(this, permissionsList, REQUEST_CODE);

Für Fragment:

requestPermissions(permissionsList, REQUEST_CODE);

  • Fragment requestPermissions erfordert Android M, ist jedoch in FragmentCompat für ältere API-Versionen verfügbar.

    – Brian White

    27. Januar ’18 um 18:00

  • 23

    Richtiger Weg, um Erlaubnis innerhalb eines Fragments anzufordern

    – Tarun

    30. März ’18 um 7:07

  • 1

    Jetzt Standardteil der Fragment-Klasse in der AndroidX-Fragment-Bibliothek, daher sollte FragmentCompat nicht erforderlich sein (bei Verwendung von AndroidX).

    – big_m

    3. Dezember ’20 um 19:12

  • 5

    Ist requestPermissions in Fragment nicht veraltet?

    – Charles Woodson

    12. März ’21 um 16:40 Uhr

  • 1

    requestPermissions ist veraltet , alle aktualisierten Antworten

    – Hari Shankar S

    29. Mai ’21 um 4:53

1641581487 851 So uberprufen Sie die Berechtigung im Fragment
Evgeny Nozdrev

Fragment hat requestPermissions() und onRequestPermissionsResult() Methoden, benutze es.

Aber checkSelfPermission() ist von ActivityCompat (benötigt nicht Activity, nur Context).

if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    requestPermissions( //Method of Fragment
        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
        REQUEST_PERMISSIONS_CODE_WRITE_STORAGE
    );
} else {
    downloadImage();
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == REQUEST_PERMISSIONS_CODE_WRITE_STORAGE) {
        if (permissions[0].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            proceedWithSdCard();
        }
    }
}

  • Fragment requestPermissions erfordert Android M, ist aber in FragmentCompat verfügbar.

    – Brian White

    27. Januar ’18 um 17:55


So uberprufen Sie die Berechtigung im Fragment
AnfängerEntwickler

Ich habe Folgendes getan, um eine Berechtigung in einem Fragment zu überprüfen.

if (ActivityCompat.checkSelfPermission(getContext(),
            android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
            ActivityCompat.checkSelfPermission(getContext(),
                    android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
         requestPermissions(getActivity(),
                new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION,
                        android.Manifest.permission.ACCESS_FINE_LOCATION},
                REQUEST_LOCATION);
    } else {
        Log.e("DB", "PERMISSION GRANTED");
    }

Aktualisieren

Seit Fragment.requestPermissions ist jetzt veraltet, Google empfiehlt die Verwendung von registerForActivityResult stattdessen.

Ich habe die Anfrage so gemacht:

val permissionLauncher = registerForActivityResult(
    ActivityResultContracts.RequestPermission()
) { isGranted ->
    if (isGranted) {
        // Do if the permission is granted
    }
    else {
        // Do otherwise
    }
}

permissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION)

Weitere Dokumentation zu dieser Methode finden Sie unter dieser Link.

  • 4

    Wir müssen immer noch um Erlaubnis bitten, wenn der Benutzer sie nicht erteilt hat.

    – Karan Thakkar

    9. Mai ’17 um 6:30

  • 21

    Denken Sie daran, dass das Ergebnis der Berechtigungsanfrage in diesem Fall zu der Aktivität gelangt, die Ihr Fragment gestartet hat. Sehen ThetNaing Mizo‘s Antwort für eine Möglichkeit, das Ergebnis in Ihrem Fragment zu erhalten.

    – lsrom

    18. Apr. ’18 um 13:54

  • 1

    warum requestPermissions veraltet ist , alle aktualisierten Antworten

    – Hari Shankar S

    29. Mai ’21 um 4:51

Überprüfen Sie die Berechtigungen von Fragment (der Weg von 2021)

Der registerForActivityResult() Methode in fragment ist jetzt veraltet. Die Einstellungsmeldung schlägt vor, zu verwenden registerForActivityResult. Nach einigen Versuchen und Irrtümern ist hier der Weg für 2021:

Angenommen, der Name Ihres Fragments lautet AwesomeFragment. Dann im Konstruktor (vor dem Fragment onCreate um genau zu sein), initialisieren Sie ActivityResultLauncher<String[]> activityResultLauncher.

Java-Version

private ActivityResultLauncher<String[]> activityResultLauncher; 

public AwrsomeFragment() {
 activityResultLauncher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
            @Override
            public void onActivityResult(Map<String, Boolean> result) {
                Log.e("activityResultLauncher", ""+result.toString());
                Boolean areAllGranted = true;
                for(Boolean b : result.values()) {
                    areAllGranted = areAllGranted && b;
                }

                if(areAllGranted) {
                    capturePhoto();
                }
            }
        });
}

Dann rufst du vielleicht mit einem Klick auf die Taste die auf launch Methode:

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        String[] appPerms;
        appPerms = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA};
        this.cameraClick.setOnClickListener(v -> {
            this.activityResultLauncher.launch(appPerms);
        });
    }

Kotlin-Version

private var activityResultLauncher: ActivityResultLauncher<Array<String>>
init{
this.activityResultLauncher = registerForActivityResult(
        ActivityResultContracts.RequestMultiplePermissions()) {result ->
        var allAreGranted = true
        for(b in result.values) {
            allAreGranted = allAreGranted && b
        }
        
        if(allAreGranted) {
          capturePhoto()            
        }
    }
}

// --- ---
 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
// ... ... init views / binding... ...
   someBtn.setOnClickListener{
        val appPerms = arrayOf(
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.CAMERA
        )
        activityResultLauncher.launch(appPerms)
  }       
}

So handhaben Sie Berechtigungen in a Fragment Anruf requestPermissions Methode. Wenn Sie überschreiben onRequestPermissionsResult -Methode in Fragment und Aktivität, die dieses Fragment enthält, rufen Sie super.onRequestPermissionsResult(...) in der Aktivitätsmethode, um den Aufruf an die onRequestPermissionsResult Methode im Fragment.

So uberprufen Sie die Berechtigung im Fragment
Erik

Mit Kotlin rufen Sie an requestPermissions(arrayOf(Manifest.permission.THE_PERMISSION_CODE_YOU_WANT), PERMISSION_REQUEST_CODE) und fügen Sie Ihrem Fragment die folgende Überschreibung hinzu

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out kotlin.String>, grantResults: IntArray): Unit {

}

1641581487 993 So uberprufen Sie die Berechtigung im Fragment
Ryan

onRequestPermissionsResult wird in der Aktivität aufgerufen, nicht im Fragment. Überschreiben versuchen onRequestPermissionsResult stattdessen in der Aktivität.

  • Dies ist zwar wahr, es fehlt jedoch eine Erklärung dafür, warum dies wahr ist und wie man es beheben kann – wie man es bekommt onRequestPermissionResult im Fragment. Sowohl die Erklärung als auch die Art und Weise, wie das Ergebnis in fragmentiert empfangen wird, wird in der Antwort erklärt von ThetNaing Mizo.

    – lsrom

    18. Apr. ’18 um 13:33

  • Danke, ich habe mich gefragt, warum mein Code in Fragment nicht funktioniert

    – Azizjon Kholmatov

    1. Okt ’19 um 16:03

.

178600cookie-checkSo überprüfen Sie die Berechtigung im Fragment

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy