我正在进行音视频合并,一切正常。合并文件后,它将保存在指定的路径中。这个路径被传递到另一个activity,我们在activityresult中找到它,这个文件在videoview中播放。
一切都很好,有一件事让我呆在一个地方。这是在我的onacitivityresult中,我得到了指定的路径,在日志中检查了它,但是在查找文件时,我的file.exists()总是返回null。
我可以看到我的文件被存储在正确的路径中,但我不知道为什么它不起作用。我在另一个活动中使用了file.exists(),它工作正常,但在这个活动中没有。
我已经做了每一件可能的事情来解决我的问题,并在互联网上查看,但没有结果。
我试过的是:

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

我也试过:
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath + customVideoPath);

这是另一个我认为可行但没有奏效的解决方案:
File file = new ("/mnt"+customVideoPath);

它总是在else条件下,不执行所需的功能。
接下来是我发送的代码中的数据:
以路径形式传递文件
@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();
        }

这是异步任务的一部分。现在我接收文件的另一个活动是:
//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();
                }
            }
    }
}

但我得到的只是实现了else语句
日志结果:
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

在日志中,您可以清楚地看到文件路径在那里,但是in if语句没有得到实现
我已经检查了设备内存中的文件,它在那里保存,我可以播放它,文件工作正常。
请给我一个有价值的建议,以便我能更进一步。谢谢
此外,我在清单中拥有写入外部数据和读取外部数据的权限。
编辑
我已经成功实现了它,问题是在路径名中,路径名指定不正确,所以发生了问题。否则就没问题了。谢谢你的大力支持。我吸取了教训。

最佳答案

试着给出音频文件的名称作为参数。

File myFile = new File(audioFilename);

我有一次遇到同样的问题,而且很有效。听起来怪怪的,但很管用。

07-27 19:29