Lorsque vous utilisez la caméra intention de prendre une vidéo de mon émulateur Android, OnActivityResult a renvoyé l'intention de mon enregistrement vidéo.Mais si je l'ai fait de mon appareil physique Moto G6, l'intention retournera NULL (comme indiqué dans certaines des images. . Je vais insérer mon code pour vous donner une meilleure image.
Voici mon code ... P>
private File getFilePath() { File folder = new File(getActivity().getExternalFilesDir(null), "test_drives"); if (!folder.exists()) { folder.mkdir(); } Date currentTime = Calendar.getInstance().getTime(); video_file = new File(folder, "test_drives_" + currentTime + ".mp4"); return video_file; }
4 Réponses :
private fun getRealPathFromURI(contentURI: Uri): String? { val result: String? val cursor = contentResolver.query(contentURI, null, null, null, null) if (cursor == null) { // Source is Dropbox or other similar local file path result = contentURI.path } else { cursor.moveToFirst() val idx = cursor.getColumnIndex(MediaStore.Images.Media.DATA) result = cursor.getString(idx) cursor.close() } return result } val file: File = File(getRealPathFromURI(Uri.parse(imagePath))) try this to get the real path for file
Bonjour Pouvez-vous le faire s'il vous plaît à Java?
Remplacez avec votre code OnAticitVorresult.
@Override public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == VIDEO_REQUEST && resultCode == RESULT_OK) { ParseQuery<ParseObject> query = ParseQuery.getQuery("CitaTestDrive"); query.getInBackground(idEventoTestDrive, new GetCallback<ParseObject>() { @Override public void done(ParseObject object, ParseException e) { videoUri = data.getData(); String file = videoUri.getPath(); File inputFile = new File(file); try { fileInputStream = new FileInputStream(inputFile); } catch (FileNotFoundException ex) { ex.printStackTrace(); } Bitmap thumbnailBm = BitmapFactory.decodeStream(fileInputStream); ByteArrayOutputStream st = new ByteArrayOutputStream(); thumbnailBm.compress(Bitmap.CompressFormat.JPEG, 50, st); byte[] byteArr = st.toByteArray(); Date currentTime = Calendar.getInstance().getTime(); ParseFile thumbFile = new ParseFile("TestDrive" + " " + currentTime + " " + nombreAsesor + ".jpg", byteArr); object.put("Video", thumbFile); object.saveInBackground(new SaveCallback() { @Override public void done(ParseException e) { if (e == null) { Toast.makeText(getActivity(), "Video uploaded to server", Toast.LENGTH_LONG).show(); } else { Toast.makeText(getActivity(), e.toString(), Toast.LENGTH_LONG).show(); } } });
Bonjour praful Qu'avez-vous changé dans ce code en rapport avec mon code?
@Felipefranco J'ai changé videouri = data.getdata (); code> cette ligne.
Bonjour praful Comment est cette ligne d'origine de videoui = new_video_file;
@Felipefranco maintenant je modifie cette ligne s'il vous plaît vérifier.
Premièrement, créez le fichier dans lequel la vidéo Données brutes serait stockée, puis utilisez ce fichier pour obtenir le chemin d'accès à la lecture de cette vidéo.
Voici la syntaxe de base: P>
private static final int REQUEST_VIDEO_CAPTURE = 300; private Uri videoUri; private void dispatchVideoIntent(){ Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); File outputFile = new File("your file path goes here"); videoUri = FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID + ".provider",new_video_file); takeVideoIntent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri); if (takeVideoIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK && videoUri != null) { // do what you want with videoUri } }
implémentation 'com.github.jkwiecien: easyImage: 2.1.1' p>
Assurez-vous que vous devez obtenir la permission de la Utilisateur ou définir la permission dans le fichier manifeste. H2>
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
EasyImage.handleActivityResult(requestCode, resultCode, data, DoctorRegisterLastActivity.this, new DefaultCallback() {
@Override
public void onImagePickerError(Exception e, EasyImage.ImageSource source, int type) {
}
@Override
public void onImagesPicked(@NonNull List<File> imageFiles, EasyImage.ImageSource source, int type) {
if (!imageFiles.isEmpty()) {
if (type == 1) {
Glide.with(mContext)
.load(imageFiles.get(0).getPath())
.diskCacheStrategy(DiskCacheStrategy.ALL)
.placeholder(R.drawable.ic_logo_green)
.into(iv_featured_cover);
}
}
}
@Override
public void onCanceled(EasyImage.ImageSource source, int type) {
if (source == EasyImage.ImageSource.CAMERA_IMAGE) {
File photoFile = EasyImage.lastlyTakenButCanceledPhoto(LastActivity.this);
if (photoFile != null) photoFile.delete();
}
}
});
}
Montrez votre code sur l'onactimityResult et votre code complet
J'ai mis à jour le post pour les méthodes que vous demandez amit
Salut felipe, data.getdata () renvoie toujours null lorsque vous utilisez un fournisseur. Vous devez utiliser "Uri" que vous avez créé dans Func Record ()
Bonjour kasim je ne comprends pas que j'ai besoin d'obtenir les données afin de télécharger la vidéo sur le serveur.
Votre fonction d'enregistrement est déjà correcte. Vous devez modifier l'onactimityresult.
Modifier la ligne Videouri = FileProvider.GetTuriforFile (getactivité (), buildconfig.application_id + ".provider", new_video_file); et Supprimer la ligne "videouri = data.getdata ();". Essayer à nouveau. Je n'ai pas vérifié plus.