web-dev-qa-db-de.com

Die Methode checkSelfPermission kann nicht aufgelöst werden

Ich versuche, meine App für Android 6 gerüstet zu machen, und jetzt bleibe ich an dem Punkt, an dem Sie Berechtigungen anfordern und prüfen müssen.

Ich habe folgendes aus den Dokumenten versucht:

int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR);

Das Problem ist, dass Android Studio Cannot resolve method 'checkSelfPermission' sagt.

Ich habe bereits appcompat und die Unterstützung für lib hinzugefügt. ContextCompat ist AS bekannt, aber die Methode selbst ist nicht bekannt. Ich weiß nicht, was ich falsch mache - in einem anderen Projekt kann ich diese Methode schreiben und sie wird erkannt.

TargetAPI ist 23.

Kennt jemand eine Lösung?

10
Phil

Oh mein Gott - was für ein dummer Fehler.

AS importierte die Supportlib als Dose und diese Dose stammte aus dem Jahr 2014. Ich habe den Jarimport gerade durch die echte Abhängigkeit ersetzt und weiß, dass er funktioniert.

Danke für Ihre Hilfe, Jungs!

15
Phil

So rufen Sie in verschiedenen Szenarien auf,

Bei Aktivität:

 ContextCompat.checkSelfPermission(MyActivity.this,
        Manifest.permission.WRITE_CALENDAR);

Im Falle eines Fragments:

 ContextCompat.checkSelfPermission(getActivity(),
        Manifest.permission.WRITE_CALENDAR);

Im Falle einer Dienstklasse verwenden Sie den Kontext:

 ContextCompat.checkSelfPermission(context,
        Manifest.permission.WRITE_CALENDAR);

Kommentar unten für weitere Informationen

16
Manikanta

Für Fragment verwenden Sie getActivity().checkSelfPermission

Für Activity verwenden Sie this..checkSelfPermission oder einfach checkSelfPermission

3
Ali Akram
@SuppressLint("NewApi")

Ich habe es einfach oben auf meiner Seite verwendet und es funktioniert für mich ...

1
Fahad Jadun

Ich hatte das gleiche problem In meinem Fall habe ich eine Bibliothek hinzugefügt, die eine alte AppCompat-Version verwendet, dann konnte der Compiler die richtige AppCompat nicht finden.

Um das Problem zu beheben, habe ich beim Importieren der Täterbibliothek die Option {transitiv = false} hinzugefügt. Damit wurde das Problem behoben.

Jetzt habe ich:

api ('org.library.using.old.appcompat:1.0.1') {transitive = false}

0
P1x

So dumm es vielleicht auch sein mag, es könnte am falschen Ort sein. Ich hatte das gleiche Problem. Der fettgedruckte Teil ist dort, wo ich den Code ursprünglich eingegeben hatte. Der kursive Teil ist, wo es hätte gehen sollen

locationListener = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        Log.i("-----------", location.toString());
    }
    **if (ContextCompat.checkSelfPermission(this, 
        Manifest.permission.ACCESS_FINE_LOCATION) != 
            PackageManager.PERMISSION_GRANTED) {'some code'}**
    }; 'End of LocationListener method
    *if (ContextCompat.checkSelfPermission(this, 
        Manifest.permission.ACCESS_FINE_LOCATION) != 
        PackageManager.PERMISSION_GRANTED) { 'some code'}*
0
gavin