이 페이지에 어울리지 않을지는 모르나 도움을 주실 수 있을 듯하여 한 가지 질문 드리겠습니다.
<질문> 삼성 갤럭시폰에서 파일도 존재하고 파일크기도 0이 아닌데 FileNotFoundException 에러 나타나는 문제
구글링해도 제 힘으로 답을 구하지 못해 도움을 청합니다.
도와주시면 정말로 감사하겠습니다.
1. 테스트 환경 : 폰(삼성 갤럭시S3/갤럭시S5), 파일(MMS에 첨부된 .vcf 주소록파일), 안드로이드 스튜디오 2.3, 윈7(64비트)
아래 코드의 실행 결과 : "파일 OK/2025bytes/주소록 내용을 읽을 수 없습니다."
즉 exists 메소드로 검사하면 파일도 존재하고, length 메소드로 검사하면 파일크기도 0이 아니므로 분명 존재하는 파일입니다.
그런데 BufferedReader/readLine으로 파일을 읽으면 FileNotFoundException 에러를 내고 파일 내용을 읽지 못합니다.
다른 테스트 폰 엘지 G2에서는 정상으로 읽힙니다.
// 주소록 보이기
public void viewVcf(final String filePath) {
File vcfFile = new File(filePath);
if (vcfFile.exists()) {
long lFileSize = vcfFile.length();
tv_unique.setText("파일 OK/"+lFileSize+"bytes");
String content = readFile(filePath);
if (content.isEmpty())
tv_unique.setText(tv_unique.getText().toString()+"/주소록 내용을 읽을 수 없습니다.");
else {
...
}
}
else {
report10sec("주소록 파일이 없습니다.");
}
}
2. 테스트 환경 : 폰(삼성 갤럭시S3/갤럭시S5), 파일(MMS에 첨부된 .mp4 동영상파일), 안드로이드 스튜디오 2.3, 윈7(64비트)
동영상 파일의 경우도 위와 비슷합니다.
"파일 OK/707989bytes"
// 비디오 재생
public void viewVideo(final String filePath) {
File videoFile = new File(filePath);
if (videoFile.exists()) {
long lFileSize = videoFile.length();
tv_unique.setText("파일 OK/"+lFileSize+"bytes");
...
}
else {
report10sec("비디오 파일이 없습니다.");
}
}
위 ... 부분의 코드에 따라서 2가지 테스트 결과입니다.
1) startActivity(intent);
삼성폰, 엘지폰 모두 비디오가 재생되지 않습니다.
(엘지) java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
(삼성) java.lang.NullPointerException
2) videoView.start();
엘지폰에서는 정상으로 재생이 됩니다.
삼성폰에서는 에러 로그는 없으나, "재생할 수 없는 동영상입니다./확인" 메시지가 뜨고 비디오가 재생되지 않습니다.