webentwicklung-frage-antwort-db.com.de

So prüfen Sie die Berechtigung in Fragment

Ich möchte eine Erlaubnis in einem Fragment prü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 wird nicht nach allow oder deny 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
    }
}
49
S.M_Emamian

Ich habe folgendes getan, um eine Erlaubnis 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");
    }
26
rookieDeveloper

So habe ich es gemacht, es funktioniert für mich. Vielen Dank!

Für Aktivität:

ActivityCompat.requestPermissions(this, permissionsList, REQUEST_CODE);

Für Fragment:

requestPermissions(permissionsList, REQUEST_CODE);
132
ThetNaing Mizo

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

checkSelfPermission() ist jedoch von ActivityCompat (nicht Activity erforderlich, 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();
        }
    }
}
34
Evgeny Nozdrev

onRequestPermissionsResult wird in der Aktivität nicht im Fragment aufgerufen. Versuchen Sie stattdessen, onRequestPermissionsResult in der Aktivität zu überschreiben.

2
Ryan

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

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

}
2
Erik

Wenn Sie Ihre Erlaubnis für die Anwendung von Einstellungen geschlossen haben, können Sie Ihre Erlaubnis nicht mit Code oder Ihrer Android-Version öffnen, die niedriger als Marshmallow ist.

Sie können diese Dokumentation überprüfen https://developer.Android.com/training/permissions/requesting.html Dies ist ein Beispiel https: //www.learn2crack. de/2015/10/Android-Marshmallow-permissions.html

1
Muhammed Almaz

Was für mich funktionierte, war das Aufrufen der onRequestPermissionsResult - Methode in der activity, in der fragment implementiert ist, anstatt es in fragment selbst aufzurufen. Inside onCreateView in fragment:

    Button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int permissionCheck = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE);

            if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_MEDIA);
            }else{
                //Do your work
                fetchMethod();
            }

        }
});

In der Aktivität, die zur Implementierung des Fragments außerhalb der onCreate -Methode beiträgt:

    @Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_MEDIA:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                fetchMethod();

            }else{
                Toast.makeText(getApplicationContext(), "Permission not granted!", Toast.LENGTH_SHORT).show();
            }
            break;

        default:
            break;
    }
}
0
Pranay Anand

Um Berechtigungen in einer Fragment-Methode zu verarbeiten, rufen Sie requestPermissions auf. Wenn Sie die Methode onRequestPermissionsResult sowohl im Fragment als auch in der Aktivität überschreiben, die dieses Fragment enthält, müssen Sie in der Aktivitätsmethode super.onRequestPermissionsResult(...) aufrufen, um den Aufruf an die Methode onRequestPermissionsResult im Fragment weiterzuleiten.

0
Sergey