Heim  >  Artikel  >  Java  >  Wie lese ich eine PDF-Datei aus dem Assets-Ordner in einer Android-App?

Wie lese ich eine PDF-Datei aus dem Assets-Ordner in einer Android-App?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-29 01:52:30248Durchsuche

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

Eine PDF-Datei aus einem Assets-Ordner lesen

Dieser Artikel befasst sich mit dem Problem des Lesens einer PDF-Datei aus einem Assets-Ordner in einer Android-Anwendung. Benutzer, die versuchen, auf die PDF-Datei zuzugreifen, erhalten die Fehlermeldung „Der Dateipfad ist ungültig.“

Codeanalyse

Der bereitgestellte Code ruft die PDF-Datei aus dem Assets-Ordner ab . Der zum Öffnen der PDF-Datei im Intent angegebene Pfad verweist jedoch auf den Assets-Ordner, was zu Problemen mit Berechtigungen und Zugriff führen kann.

Lösung

Um dieses Problem zu beheben, Betrachten Sie den folgenden Code:

public class SampleActivity erweitert Aktivität {</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);
    }
}

}

Erklärung

  • Dieser Code liest die PDF-Datei aus dem Assets-Ordner in eine Datei im internen Speicher der App.
  • Der Pfad im Intent wird jetzt aktualisiert, um auf die Datei in zu verweisen den internen Speicher und stellt Zugriffsberechtigungen sicher.
  • Dieser Ansatz beseitigt den Fehler „Der Dateipfad ist ungültig“.

Zusätzliche Überlegungen

  • Stellen Sie sicher, dass die Berechtigung WRITE_EXTERNAL_STORAGE in der Manifestdatei erteilt ist.
  • Stellen Sie sicher, dass die PDF-Datei am angegebenen Speicherort im Assets-Ordner vorhanden ist.

Das obige ist der detaillierte Inhalt vonWie lese ich eine PDF-Datei aus dem Assets-Ordner in einer Android-App?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn