我正在处理音频视频合并,所有工作都正常。合并文件后,它将保存在指定的路径中。并且这个路径被传递给我们在onActivityResult中获得的另一个活动,并且此文件在videoView中播放。file.exists()总是在Android中失败
一切工作正常,有一件事让我留在一个地方。这是在我的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);
它始终对其他条件并不执行所需的功能。
来到代码,我在此代码发送出来的数据:
文件传递路径形式
@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
在日志可以清楚地看到文件路径在那里,但在如果语句没有得到执行
我已经检查过设备内存中的文件,它已经保存了,我可以播放它,文件工作正常。
请给出一个宝贵的建议,以便我可以进一步移动。由于
另外我已经许可在我的清单为WRITE_EXTERNAL_DATA和READ_EXTERNAL_DATA。
编辑
我已经成功地实现了它,这个问题是全路径,路径未指定正确的,因此发生问题。否则,它工作正常。感谢您的大力支持。我吸取了教训。
+0
我看到''onPostExecute''告诉我你创建/渲染文件异步,这很好。无论如何,该文件在查询时没有被写入/提交(某些millis可能会有所不同)?听起来可能听起来很愚蠢,但在测试文件是否存在之前,请尝试一下完全简单的睡眠1000或类似的东西。如果这有所作为,至少有一点可以开始搜索,需要刷新文件或如何及时保存文件。 –
+0
尝试在文件对象声明之前附加文件:或file://路径 –
+0
String s的值是什么?你在onPostExecute()中使用file.exists()吗?没有?然后先做。 –