2017-08-23 5 views
3

Je travaille sur la fusion audio vidéo et tout fonctionne bien. Après la fusion du fichier, il est enregistré dans le chemin spécifié. Et ce chemin est passé à l'autre activité que nous obtenons onActivityResult et ce fichier est lu dans videoView.file.exists() échoue toujours dans Android

Tout fonctionne bien, il y a une chose qui me fait rester à un seul endroit. et c'est dans mon onAcitivityResult que je reçois le chemin spécifié, vérifié dans le journal, mais quand il s'agit de trouver le fichier mon file.exists() renvoient toujours null.

Je peux voir mon fichier stocké dans le bon chemin, mais je ne sais pas pourquoi cela ne fonctionne pas. J'ai utilisé file.exists() dans une autre activité et cela fonctionne bien mais pas sur cette activité.

J'ai fait chaque chose possible pour résoudre mon problème et vérifié sur internet mais aucun résultat.

Les choses que j'ai essayé sont:

File file = new File(customVideoPath); 
if(file.exists()){ 
    //do something 
}else 
//do something 

J'ai essayé cela aussi:

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath + customVideoPath); 

C'est une solution plus que je pensais travailler, mais ne fonctionne pas:

File file = new ("/mnt"+customVideoPath); 

Il est toujours à la condition else et n'exécute pas la fonction désirée.

En venant au code J'envoie les données dans ce code:

fichier qui passe sous forme de chemin

@Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      Intent intent = new Intent(); 
      intent.putExtra("addedAudioFile",s); //for single file no array is passed right now 
      Log.e("AUDIO_VIDEO FILE=====",s); 
      setResult(RESULT_OK,intent); 
      finish(); 
     } 

Ceci est une partie de la tâche asynch. Maintenant, l'autre activité où je reçois le fichier est:

//getting the files after adding some changes to the selected video 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    switch (requestCode) { 
     case CustomizeVideo: 
      if (resultCode == RESULT_OK) { 
       String customVideoReceived = data.getExtras().getString("addedAudioFile"); 
       Log.e("GETTING IT=====", customVideoReceived); 

       File file = new File(customVideoReceived); 

       Log.e("FILE_CHECK",file.toString()); 

       if (file.exists()) { 
        //for starting the video activity 
        mVideoView.setVideoPath(customVideoReceived); 
        mController = new MediaController(EditVideoActivity.this); 
        mController.setMediaPlayer(mVideoView); 
        mVideoView.setMediaController(mController); 
        mVideoView.requestFocus(); 
        mVideoView.start(); 
       } else { 
        Toast.makeText(getApplicationContext(), "Cannot play the file!", Toast.LENGTH_SHORT) 
          .show(); 
        Toast.makeText(getApplicationContext(), "File does not merged successfully", Toast.LENGTH_SHORT) 
          .show(); 
       } 
      } 
    } 
} 

Mais tout ce que je reçois est la instruction else mis en œuvre

résultats du journal:

08-23 17:23:39.818 3369-3369/in.pinelane.myhovi E/AUDIO_VIDEO FILE=====: /storage/emulated/0/HovieAddTrack.mp4 
08-23 17:23:39.831 3369-3369/in.pinelane.myhovi E/GETTING  IT=====: /storage/emulated/0/HovieAddTrack.mp4 
08-23 17:23:39.831 3369-3369/in.pinelane.myhovi E/FILE_CHECK: /storage/emulated/0/HovieAddTrack.mp4 

Le journal vous pouvez voir clairement que le chemin du fichier est là mais le si l'instruction n'est pas mise en œuvre

Et j'ai vérifié le fichier dans la mémoire de l'appareil, il est là et enregistré je peux le lire, le fichier fonctionne très bien.

S'il vous plaît donner une suggestion valable afin que je puisse aller plus loin. Merci

En outre, j'ai l'autorisation dans mon manifeste pour WRITE_EXTERNAL_DATA et READ_EXTERNAL_DATA.

Permet de modifier

Je l'ai implémenté avec succès, le problème était nom_du_canvas, le chemin n'a pas été spécifié correctement si le problème est survenu. Sinon, cela fonctionnait bien. Merci pour l'énorme soutien. J'ai appris ma leçon.

+0

Je vois '' onPostExecute'' qui me dit que vous créez/rendez le fichier async, ce qui est bien. Est-il possible que le fichier n'ait pas été écrit/validé au moment où vous l'interrogez (quelques millis peuvent faire la différence)? Cela peut sembler stupide au début, mais essayez juste un sommeil 1000 tout à fait simple ou quelque chose de similaire avant de tester si le fichier existe. Si cela fait une différence, vous avez au moins un point pour commencer votre recherche, où vous devez vider le fichier ou comment le conserver à temps. – Grisgram

+0

essayez d'ajouter le fichier: ou le fichier: // dans le chemin avant la déclaration de l'objet fichier – pkgrover

+0

Quelle est la valeur de String s? Et avez-vous utilisé file.exists() dans onPostExecute()? Non? Alors faites d'abord. – greenapps

Répondre

1

Essayez de donner juste le nom du fichier audio comme argument à savoir

File myFile = new File(audioFilename); 

j'avais une fois le même problème et cela a fonctionné. Ça a l'air bizarre mais ça a marché.

1

Essayez ceci.

File sdDir = Environment.getExternalStorageDirectory(); 
File file = new File(sdDir + "filename") 
if(file.exists()){ 
Log.e("FILE_CHECK","file exists"); 
} 
else 
Log.e("FILE_CHECK","file dosen't exists");