사용자가 전화에서 PDF 파일을 열 수있는 PDF 리더를 만들려고합니다.Android : 저장 장치에서 PDF 파일을 열 수 없습니다.
내가 나를 파일 여기
Intent openFileIntent = new Intent(Intent.ACTION_GET_CONTENT);
openFileIntent.setType("*/*");
startActivityForResult(openFileIntent, FILE_OPEN_CODE);
를 탐색 할 수있는 의도를함으로써 시작은 onActivityResult를이다 : 나는 열린 우리당이 있으면
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == FILE_OPEN_CODE && resultCode == RESULT_OK && data != null){
Uri selectedFile = data.getData();
try {
openFile(selectedFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
, 나는 방법에 보내 그 PDF 파일 열기 :
public void openFile(Uri fileUri) throws IOException {
final int WIDTH = viewPDF.getWidth();
final int HEIGHT = viewPDF.getHeight();
String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + fileUri.getPath();
Bitmap bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_4444);
File pdfFile = new File(filePath);
Toast.makeText(getApplicationContext(), "Opened: " + filePath, Toast.LENGTH_LONG).show();
PdfRenderer renderer = new PdfRenderer(ParcelFileDescriptor.open(pdfFile, ParcelFileDescriptor.MODE_READ_ONLY));
currentPage = 0;
Matrix matrix = viewPDF.getImageMatrix();
Rect rect = new Rect(0, 0, WIDTH, HEIGHT);
renderer.openPage(currentPage).render(bitmap, rect, matrix, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
viewPDF.setImageMatrix(matrix);
viewPDF.setImageBitmap(bitmap);
}
지금 문제는 다음 오류가 발생합니다.
W/System.err: java.io.FileNotFoundException: No such file or directory
나는 파일이 존재 확신합니다,하지만 난 열린 우리당에서 얻는 경로가 I를 내가 대신 "MY_FILE.pdf"의 취득 파일 이름을 beign
/storage/emulated/0/document/2443
2443 따르고
또한 렌더러에 PDF 파일을 열려면 파일 이름을 얻을 수 있어야합니다, 나는 매니페스트
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
에 권한을 선언 한
그리고 수동으로 android M 이상의 권한을 묻는 메시지가 표시됩니다.
'그러나 나는 열린 우리당에서 얻는 경로는 다음과 /저장되어/2443'// 0/문서를 에뮬레이트. 이것이 uri.getPath()의 값입니다. 하지만 uri.toString()을 사용하여 얻은 콘텐츠 체계를 더 잘 살펴 봐야합니다. – greenapps
조금 더 정교한 마음? –
시도해 보면 콘텐츠를 얻습니다 : //com.android.providers.downloads.documents./document/2443 –