Ich muss bei einigen Aktivitäten, bei denen die Kameravorschau in surfaceview angezeigt wird, die Erlaubnis Kamera und Standort anfordern.

Wo muss ich die Anforderungsberechtigungsfunktion platzieren? onCreate , onResume oder onSurfaceCreated ?

Und wo muss ich die Kamera einrichten?

1
Reynaldo Napitupulu 19 Jän. 2019 im 09:35

4 Antworten

Beste Antwort

Siehe Erlaubnis anfordern entspricht direkt dem Absturz der App, wenn der Dienst angefordert wird und die Erlaubnis nicht verfügbar ist. Ich würde es vorziehen, die Berechtigung in onResume einzufügen, da jede Benutzeraktion, d. H. Minimieren oder ein Dialogfeld mit niedrigem Batteriestand, oben auf dem Bildschirm angezeigt wird, die Berechtigungsänderungen erneut überprüfen müssen, damit Ihre Aktivitätsänderungen aus welchen Gründen auch immer aufgetreten sind. Entweder versucht die Kamera nach einer Netzwerkanforderung zu öffnen oder wie die Situation ist.

Geben Sie die Berechtigung zum Überprüfen der Kamera in onResume ein.

Sprechen wir also darüber, wie Sie es machen würden. Es gibt eine Reihe von Wahrnehmungen. Was ich lieber mache ist Ich erstelle eine Helper -Klasse, die mich über den Berechtigungsstatus mit diesem Code informiert

class PermissionsHelper(activity: Activity) {
private val activity: Context

init { this.activity = activity }

fun isCameraPermissionAvailable()=ActivityCompat.checkSelfPermission(activity, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED

}

}

Überprüfen Sie daher in der onResume -Methode Ihrer Aktivität, ob die Berechtigung verfügbar ist, andernfalls fordern Sie die Berechtigung an.

 override fun onResume() {
    super.onResume()
    if (!PermissionsHelper(this).isCameraPermissionAvailable()) {
        requestPermissions(arrayOf(Manifest.permission.CAMERA), CAMERA_REQUEST_CODE)
    }
}

Bitte beachten Sie auch zwei Punkte

1) You should write permission for camera in manifeast so that app can request the permission
2) Check if the camera permission is available or not before opening the camera, if not you should again request for the permission

(wie in der onResume-Phase)

0
Sháilèndra Wregmi 19 Jän. 2019 im 07:00

Definieren Sie zunächst die Berechtigung in der Manifestdatei.

In der Java-Datei

Sie müssen die Berechtigung zur Laufzeit erneut mit checkSelfPermission anfordern. Dies ist sehr wichtig, da der Benutzer, wenn er nicht die Erlaubnis erteilt hat, nicht auf die Kamera zugreifen kann. Sie sollten diesen Code und alle mit der Kamera verbundenen Funktionen schreiben, wenn die Kamera tatsächlich angezeigt werden soll.

Wenn beispielsweise die Schaltfläche Open Camera angezeigt wird, prüfen Sie zunächst, ob der Benutzer die Berechtigung erteilt hat oder nicht, und öffnen Sie dann die Kamera.

0
Sagar Balyan 19 Jän. 2019 im 06:46

Sie können die Berechtigungen an einer beliebigen Stelle platzieren, bevor Sie den Dienst verwenden. Technisch spielt es keine Rolle. Es ist jedoch benutzerfreundlich, mit einem Startbildschirm um Erlaubnis zu bitten, der den Grund angibt, warum die Erlaubnis benötigt wird, oder kurz vor der Nutzung des Dienstes danach zu fragen.

0
Charan M 19 Jän. 2019 im 07:15

Möglicherweise ist der relevanteste Ort, an dem Sie gemäß Android-Dokumentation um Erlaubnis bitten können

Jedes Mal, wenn Sie einen Vorgang ausführen, für den diese Berechtigung erforderlich ist.

Der Grund für diese Empfehlung ist, dass Benutzer ab Android 6.0 (API-Level 23) Berechtigungen für jede App jederzeit widerrufen können. Selbst wenn die App gestern die Kamera verwendet hat, kann sie nicht davon ausgehen, dass sie heute noch über diese Berechtigung verfügt.

Daher muss die App jedes Mal nach der Berechtigung "suchen", um einen Vorgang auszuführen, für den diese Berechtigung erforderlich ist.

Sie können die Kamera und andere Vorgänge "nach" der Erteilung der Berechtigung zur Verwendung der Kamera durch den Benutzer einrichten. Sie können den Status überprüfen, wenn der Benutzer eine Berechtigung erteilt, indem Sie onRequestPermissionsResult überschreiben.

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_CAMERA: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // permission was granted, yay! Do the
                // camera-related task you need to do.
            } else {
                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request.
    }
}
0
AADProgramming 19 Jän. 2019 im 07:26