>  기사  >  Java  >  Android 앱의 자산 폴더에서 PDF 파일을 읽는 방법은 무엇입니까?

Android 앱의 자산 폴더에서 PDF 파일을 읽는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-29 01:52:30322검색

How to Read a PDF File from the Assets Folder in an Android App?

자산 폴더에서 PDF 파일 읽기

이 문서에서는 Android 애플리케이션 내의 자산 폴더에서 PDF 파일을 읽을 때 발생하는 문제를 다룹니다. PDF에 액세스하려고 시도하는 사용자에게는 "파일 경로가 유효하지 않습니다."라는 오류 메시지가 표시됩니다.

코드 분석

제공된 코드는 자산 폴더에서 PDF 파일을 검색합니다. . 그러나 인텐트에서 PDF를 열기 위해 지정된 경로는 자산 폴더를 참조하므로 권한 및 액세스에 문제가 발생할 수 있습니다.

해결책

이 문제를 해결하려면, 다음 코드를 고려하세요.

public class SampleActivity extends Activity {</p>
<pre class="brush:php;toolbar:false">@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    CopyReadAssets();
}

private void CopyReadAssets() {
    AssetManager assetManager = getAssets();
    InputStream in = null;
    OutputStream out = null;
    File file = new File(getFilesDir(), "abc.pdf");
    try {
        in = assetManager.open("abc.pdf");
        out = openFileOutput(file.getName(), Context.MODE_WORLD_READABLE);
        copyFile(in, out);
        in.close();
        out.flush();
        out.close();
    } catch (Exception e) {
        Log.e("tag", e.getMessage());
    }

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.parse("file://" + getFilesDir() + "/abc.pdf"), "application/pdf");

    //Grant permission to the user after confirming existence of the file
    if (file.exists()) {
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
        try {
            getApplicationContext().startActivity(intent);
        } catch (ActivityNotFoundException e) {
            Toast.makeText(this, "NO PDF Viewer", Toast.LENGTH_SHORT).show();
        }
    }
}

private void copyFile(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    int read;
    while ((read = in.read(buffer)) != -1) {
        out.write(buffer, 0, read);
    }
}

}

설명

  • 이 코드는 자산 폴더의 PDF 파일을 앱 내부 저장소 내의 파일로 읽어옵니다.
  • 이제 인텐트의 경로가 자산 폴더의 파일을 가리키도록 업데이트됩니다. 내부 저장소에 액세스 권한을 보장합니다.
  • 이 방법을 사용하면 "파일 경로가 유효하지 않습니다." 오류가 발생하지 않습니다.

추가 고려 사항

  • 매니페스트 파일에 WRITE_EXTERNAL_STORAGE 권한이 부여되어 있는지 확인하세요.
  • PDF 파일이 자산 폴더 내의 지정된 위치에 있는지 확인하세요.

위 내용은 Android 앱의 자산 폴더에서 PDF 파일을 읽는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.