4

J'utilise actuellement des URI de contenu sur mon fournisseur de fichiers pour récupérer les images de caméra renvoyées par une intention ACTION_IMAGE_CAPTURE. Cela fonctionne bien.Utilisation de l'URI de contenu avec ACTION_VIDEO_CAPTURE

Pour une raison étrange, le même appel ne fonctionne pas lorsque vous essayez de récupérer un fichier vidéo de la caméra.

 destinationFile = File.createTempFile("video", ".mp4", this.getFilesDir()); 
     Uri uri = FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", destinationFile); 

     Intent cameraIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
     cameraIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); 
     cameraIntent.setClipData(ClipData.newRawUri(null, uri)); 
     cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 
     startActivityForResult(cameraIntent, ID); 

Lorsque les déclarations d'intention dans le onActivityResult() DestinationFile est vide.

Le simple remplacement de MediaStore.ACTION_VIDEO_CAPTURE par MediaStore.ACTION_IMAGE_CAPTURE me donne le comportement attendu: L'image capturée est enregistrée dans destinationFile.

Ceci se produit sur stock Android 6.0.1 sur un appareil Nexus et l'application de caméra Google par défaut.

Les URI de contenu ne sont-ils pas réellement pris en charge pour la capture vidéo? Je préférerais ne pas utiliser un fichier URI dans un répertoire accessible au public.

Répondre

3

Vous avez deux problèmes distincts: le comportement de l'application Appareil photo Google et le comportement de l'ensemble de l'écosystème Android.

En ce qui concerne l'application de la caméra Google, nous avons signalé cela comme a bug with respect to Android N, car il vous n'avez pas d'autre choix que d'utiliser un contentUri (si votre targetSdkVersion est N ou plus). Cela devrait être corrigé dans les prochaines versions. Cela étant dit, je ne serais pas le moins surpris si d'autres applications de l'appareil photo rencontrent des problèmes avec les valeurs contentUri. C'est l'une des préoccupations que j'ai avec Android N effectively banning the file scheme, car nous allons rencontrer des situations où ni file ni content ne sont fiables, et nous n'avons aucun bon moyen de détecter ces cas.

+0

* offtopic * vous avez supprimé votre dernière réponse à ma question (SERVICE D'EMPREINTE DIGITALE) veuillez la refaire - vous aviez raison! juste besoin de faire invalider les caches après !! s'il vous plaît refaire pour que je puisse vous accepter –

+0

Donc pour le moment nous devons continuer à utiliser les URI de fichiers - à moins de cibler Android N. Merci pour la clarification! – limmatplatz

+1

@limmatplatz: "devoir" est un terme fort. Certainement, pour vos tests (et votre santé mentale), vous devrez vous en tenir à 'file' jusqu'à ce que votre application Google Camera prenne en charge' content' correctement, après quoi vous pourrez y passer et le tester. Cependant, vous voudrez peut-être saisir cette opportunité pour déterminer ce que vous allez faire lorsque d'autres applications d'appareil photo ne pourront pas gérer correctement le contenu. Jusqu'à ce que 'targetSdkVersion' atteigne' N', 'file' devrait être sûr et devrait être supporté assez universellement. J'espère que vous pouvez attendre longtemps avant de lever 'targetSdkVersion'. Comme, disons, une dizaine d'années. :-) – CommonsWare