2013-05-08 4 views
0

내 안드로이드 응용 프로그램 내에서 파일 시스템에 저장 한 pdf 파일을 여는 데 문제가 있습니다.안드로이드 응용 프로그램 내에서 PDF를 열 수 없습니다.

서버에서 바이트 배열을 serialize하는 나머지 호출이 있는데,이 바이트 배열을 내 pdf 파일로 저장합니다. 이 부분은 잘 작동하고 pdf가 저장된 디렉토리로 이동하여 모든 o.k 파일을 열 수 있습니다.

그러나 내 전화 GS4 (POLARIS Office View 5) 또는 Adobe Reader의 기본 PDF 뷰어를 통해 내 응용 프로그램 내에서 PDF를 열려고 할 때 두 응용 프로그램 모두 파일을 열 수 없습니다. POLARIS가 "이 문서를 열 수 없습니다."라는 메시지를 표시합니다. Adobe가 시작되었지만 위로 이동합니다. 문서 경로가 유효하지 않습니다.

내 파일을 퍼미션하기위한 코드입니다.

private String createFile(AttachmentDTO dto) { 
    String fileExtention = getMimeType(dto);  
    File file = new File(context.getExternalFilesDir(Constants.BASE_EXTERNAL_DIRECTORY_ATTACHMENTS), dto.getId() + fileExtention); 
    FileOutputStream fos; 

    try { 
     Files.write(dto.getAttachment(), file); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return file.getPath(); 
} 

내 파일의 전체 경로는

/storage/emulated/0/Android/data/com.rsd.childcare.mobile.client/files/attachments/2.pdf

이제 내 가정은 어느 앱도 권한 때문에 pdf를 열 수 없다는 것입니다. 그러나 나는 내 매니페스트

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

WRITE_EXTERNAL_STORAGE를 선언 할 때 난 당신이뿐만 아니라 READ 권한을 얻을 알고 있지만, 4.2 그들이이 그래서 내가 그것을 시도 줄 알았는데 추가했습니다,하지만 여전히 기쁨 내에서 다음 있습니다.

다른 생각은 "getExternalFilesDir"을 호출하여 이러한 파일에 대한 타사 응용 프로그램에 대한 읽기 권한을 부여했습니다.

아래의 코드는 사람이 내가 뭔가를 표시

감사

+0

연결을 사용하여 절대 File 객체를 생성하지 마십시오. 적절한'File' 생성자를 사용하십시오. 나는 또한'FLAG_ACTIVITY_CLEAR_TOP'을 제거 할 것입니다. 또한 해당 앱이 이미 관련 권한을 보유하고 있지만 * other * 앱은 권한이 필요하다는 것을 명심하십시오. 그 외에도 파일 관리자를 설치하고 파일 관리자에서 PDF를 열어보십시오. 실패 할 경우 파일 자체가 손상된 것 같습니다. 귀하의 코멘트에 – CommonsWare

+0

주셔서 감사합니다, 연결을 제거했습니다. FLAG_ACTIVITY_CLEAR_TOP을 (를) 제거했습니다. 나는 파일 관리자를 통해 파일에 접근 할 수 있으며, pdf 뷰어로 모든 파일을 성공적으로 열 수 있습니다. 이것은 flummoxing입니다 – ngatirauks

답변

0

가장 감사하게 될 거라고 올바른 방향으로 날 지점 수 있다면 나는 PDF를

String filePath = Attachment.findAttachmentPath(Integer.parseInt((String) view.getContentDescription())); 
     File file = new File(Environment.getExternalStorageDirectory() + filePath); 
     Uri path = Uri.fromFile(file); 
     Intent intent = new Intent(Intent.ACTION_VIEW); 
     intent.setDataAndType(path, "application/pdf"); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     context.startActivity(intent); 

을 읽으려고 방법을 보여줍니다 경로를 결정하기위한 코드 중복이 있습니다. 코드 작성 코드는 IntentUri을 빌드하기위한 코드보다 경로를 결정하는 데 다른 코드를 사용하는 것 같습니다. 그게 맞을 거니?

getExternalFilesDir(Constants.BASE_EXTERNAL_DIRECTORY_ATTACHMENTS)은 파일을 만드는 데 사용되며 getExternalStorageDirectory()Uri에 사용됩니다. 모든 내용이 예상대로 정렬되도록 Log 문이나 중단 점을 넣을 수 있습니다. 더 좋은 점은이 논리를 약간 통합하려는 것이므로 두 위치에서 동일한 값을 사용하고 있음을 확신 할 수 있습니다.

+0

맞습니다. 내 경로가 첨부 파일을 가져 오는 것이 잘못되었습니다. 신참 오류가 있지만 때로는 아침 2시에 코딩하는 경우가 있습니다.좋은 일을 해주신 모든 분들께 감사드립니다. – ngatirauks

관련 문제