web-dev-qa-db-fra.com

Besoin d'une autorisation pour accéder à la caméra dans la vue Web Android?

Je développe une application Web à l'aide de Webview dans le studio Android, mais après avoir rencontré un problème, je dois avoir l'accès ouvert à la caméra. Comment puis-je le faire? J'ai donné l'autorisation suivante dansAndroidManifest.xml

<uses-permission Android:name="Android.permission.CAMERA" />
<uses-feature Android:name="Android.hardware.camera" />
<uses-feature Android:name="Android.hardware.camera.autofocus" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />

que devrais-je faire plus pour ouvrir la caméra?

8
Pronab Roy

si votre application ciblant Android 6.0 et versions ultérieures ajoute une autorisation d'exécution

À partir d'Android 6.0 (API niveau 23), les utilisateurs accordent des autorisations aux applications pendant l'exécution de l'application, et non lors de l'installation.

ajouter l'autorisation d'exécution en utilisant le code ci-dessous pour la caméra

String permission = Manifest.permission.CAMERA;
int grant = ContextCompat.checkSelfPermission(this, permission);
if (grant != PackageManager.PERMISSION_GRANTED) {
    String[] permission_list = new String[1];
    permission_list[0] = permission;
    ActivityCompat.requestPermissions(this, permission_list, 1);
}

et que gérer résultat comme ça

 @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 1) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(AccountClass.this,"permission granted", Toast.LENGTH_SHORT).show();  
             // perform your action here

        } else {
            Toast.makeText(AccountClass.this,"permission not granted", Toast.LENGTH_SHORT).show();
        }
    }

}

lire à propos de permission d'exécution

5
Nilesh Rathod

Je pense que le meilleur moyen ici est d'utiliser l'API WebView pour accorder et refuser des autorisations. 

  1. Créer une classe qui s'étend WebChromeClient ;
  2. Remplacer onPermissionRequest()
  3. Demandez l'autorisation demandée dans votre application ou gérez la demande d'une autre manière.
  4. Aussi, vous devrez probablement remplacer onPermissionRequestCanceled()
  5. Définissez une instance de votre client sur WebViewwebView.setWebChromeClient(chromeClient);
2
Ufkoku

Si vous développez une application Web à l'aide de la WebView, vous devez en savoir plus sur JavascriptInterface fourni par Android. Passer par les liens suivants

Interface Javascript

Android webView

Il vous suffit de configurer javascript call back.call cette méthode à partir de votre page Web, de gérer le rappel javascript dans l’Activité/fragment et d’ouvrir la caméra.

Vous devriez également vérifier la réponse de @Nilesh Rathod pour les autorisations d'exécution.

voici les extraits de code qui vous aideront

private class WebAppInterface {

    public WebAppInterface(Context context) {
    }

    @JavascriptInterface
    public void openCamera(String title) {
        //check permissions and open camera intent;
    }
}


mWebView.addJavascriptInterface(new WebAppInterface(this), "PLATFORM_ID");
1
SAIR