2016-05-15 4 views
4

Ich verwende Google EasyPermissions-Bibliothek. In meiner App habe ich zwei Tasten, eine zum Aufnehmen von Videos und eine zum Aufnehmen von Bildern. Da beide Kameraberechtigungen benötigen, sind sie beide mit @AfterPermissionGranted gekennzeichnet.Beide Methoden werden nach erteilten Berechtigungen ausgeführt.

meine Methode So Video aufnehmen sieht wie folgt aus:

@Override 
@AfterPermissionGranted(RC_CAMERA_PERM) 
public void openCameraToRecordVideo() { 
    if (EasyPermissions.hasPermissions(this, Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
// Code here 
} 

Und in ähnlicher Weise zur Aufnahme von Bildern:

@Override 
@AfterPermissionGranted(RC_CAMERA_PERM) 
public void openCameraToCaptureImage() { 
    if (EasyPermissions.hasPermissions(this, Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
// Code here 
} 

Sie beide mit Berechtigungen kommentiert werden, da ich nicht weiß, was ein Benutzer wird klicke zuerst.

Was passiert ist, wenn Benutzer auf eine Schaltfläche klickt und die Berechtigungen akzeptiert, dann beide Methoden nacheinander ausgeführt werden. Das ist offensichtlich nicht das Verhalten, das ich will.

Ich würde wirklich jede Hilfe schätzen, wie man mit dieser Situation umgeht. Danke.

Antwort

1

Entfernen AfterPermissionGranted von beiden openCameraX-Funktion. Definierte ein privates Feld lastAction. Schreiben Sie eine neue Funktion openCamera mit einer AfterPermissionGranted-Annotation, bei der überprüft wird, ob lastAction gesetzt ist, und falls ja, rufbezogene Funktion. Überprüfen Sie in jeder openCameraX, ob Sie über eine Kameraberechtigung verfügen, und aktualisieren Sie lastAction und starten Sie die Kameraanforderung für eine Anfrage.

+0

Das ist ziemlich viel, was ich schließlich getan habe. Ich habe zwei boolesche Felder hinzugefügt: 'recordVideo' und' captureImage' und basierend auf welcher Schaltfläche geklickt wurde, setze ich das entsprechende Feld auf true. Dann, wenn 'openCamera()' läuft, überprüfe ich welches Feld wahr ist und starte die entsprechende openCameraXXX Funktion. Danke für deine Antwort. – Mes

1

Eigentlich, was Sie tun, ist die gleiche Erlaubnis zweimal mit anderen Funktionsnamen, so entfernen Sie entweder openCameraToCaptureImage() Methode oder openCameraToRecordVideo() Methode.

Verwandte Themen