0
votes

OnActivityResult ne retourne pas l'intention d'exécuter sur un périphérique physique

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;
}


6 commentaires

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.


4 Réponses :


0
votes
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 

1 commentaires

Bonjour Pouvez-vous le faire s'il vous plaît à Java?



0
votes

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();
                        }
                    }
                });


4 commentaires

Bonjour praful Qu'avez-vous changé dans ce code en rapport avec mon code?


@Felipefranco J'ai changé videouri = data.getdata (); 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.



-1
votes

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
    }
} 


0 commentaires

0
votes

Dans mon cas, j'ai utilisé EasyImagePicker Library. Il est très facile d'utiliser pour sélectionner des images ou des vidéos ou tout autre document à partir de la galerie ou de l'explorateur de fichiers. Ci-dessous la mise en œuvre:

implémentation 'com.github.jkwiecien: easyImage: 2.1.1' p>

Vous pouvez voir les étapes de mise en œuvre du lien ci-dessous: h1>

https://github.com/jkwiecien/easyimage 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();
                }
            }
        });
    }


0 commentaires