PDF Datei Speicherort

  • 9 Antworten
  • Neuester Beitrag
Diskutiere PDF Datei Speicherort im Android App Entwicklung im Bereich Betriebssysteme & Apps.
Z

zblack

Gast
ich möchte in meiner App ein Paar pdf Dateien aufmachen und den Inhalt der Datei anzeigen lassen. Folgenden Code habe ich im Internet gefunden und ausprobiert. Es funktioniert , nur mit der Bedingung, dass die Datei auf der SD Karte des Handys sich befinden soll.
Code:
public class OpenPdf extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button = (Button) findViewById(R.id.OpenPdfButton);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                File file = new File("/sdcard/example.pdf");
                if (file.exists()) {
                    Uri path = Uri.fromFile(file);
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setDataAndType(path, "application/pdf");
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    try {
                        startActivity(intent);
                    } catch (ActivityNotFoundException e) {
                        Toast.makeText(OpenPdf.this,
                                "No Application Available to View PDF",
                                Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
    }
}
Gibt es eine Möglichkeit die Datei in der App selbst abzuspeichern und die dann zu öffnen ? Z.b die Datei befindet sich in dem src datei des Eclipse projektes und man möchte die Datei von da aus aufzumachen.
MfG.
 
S

swordi

Lexikon
hmm du kannst dateien über den asset bzw raw ordner mit ausliefern.

darauf kannst du dann zugreifen.

zur not müsstest halt die datei dann auf die sd karte kopieren, beim ersten start oder ersten öffnen
 
Z

zblack

Gast
muss man in Manifestdatei oder sonst wo was zusätzliches hinzufügen ????
File file = new File("/assets/example.pdf"); tut nix. Wird nix angezeigt bei der Ausführung.
 
charli

charli

Fortgeschrittenes Mitglied
Hier mein Code für *.jpg (nur anzupassen an *.pdf) read.

Bitmap LoadImagefromassets() {
AssetManager am = getAssets();
Bitmap mybitmap = null;
BufferedInputStream buf;
try {
InputStream in = am.open("image600x800.jpg");
buf = new BufferedInputStream(in);
mybitmap = BitmapFactory.decodeStream(buf);
if (in != null) {
in.close();
}
if (buf != null) {
buf.close();
}
} catch (Exception e) {
Log.e("Error reading file", e.toString());
}
return mybitmap;
}

charli (bei seniorlabde)
 
Z

zblack

Gast
hmm. es kann sein dass ich einfach zu blöd dafür bin. habe mir das hier gebaut.
Code:
public class OpenPdf extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button = (Button) findViewById(R.id.OpenPdfButton);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                LoadImagefromassets();
            }
        });
    }
    Bitmap LoadImagefromassets() {
        AssetManager am = getAssets();
        Bitmap mybitmap = null;
        BufferedInputStream buf;
        try {
            InputStream in = am.open("example.pdf");
            buf = new BufferedInputStream(in);
            mybitmap = BitmapFactory.decodeStream(buf);
            if (in != null) {
                in.close();
            }
            if (buf != null) {
                buf.close();
            }
        } catch (Exception e) {
            Log.e("Error reading file", e.toString());
        }
        return mybitmap;
    }
}
es wird bei der Ausführung nix angezeigt. es kann sein dass ich da was vergessen habe
 
S

swordi

Lexikon
was sollte denn hier angezeigt werden?

du lädst das bitmap ja nur.


code kopieren alleine wird nicht reichen. du musst ihn verstehen und dann an deine bedürfnisse anpassen.
 
Z

zblack

Gast
hast recht
 
charli

charli

Fortgeschrittenes Mitglied
swordi schrieb:
was sollte denn hier angezeigt werden?

du lädst das bitmap ja nur.


code kopieren alleine wird nicht reichen. du musst ihn verstehen und dann an deine bedürfnisse anpassen.
swordi hat mir aus der Seele gesprochen :cool2:...
charli (seniorlabde)
 
Z

zblack

Gast
hallo. danke für die zahlreiche antworten. Habe das jetzt endlich hingekriegt. Verbesserungsvorschläge nehme ich gerne an
Hier ist meine Lösung :
Code:
public class PDFActivity extends Activity {
    private final String PDF_DATEI = "meinpdf.pdf";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
        
        try {
            Uri uri = dateiBereitstellen();
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(uri, "application/pdf");
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    private Uri dateiBereitstellen () throws IOException {
        File sdCard = Environment.getExternalStorageDirectory();
        File datei = new File(sdCard.getAbsolutePath() + File.separator + PDF_DATEI);
        if (!datei.exists()){
            InputStream stream = this.getAssets().open(PDF_DATEI);
            String name = datei.getAbsolutePath();
            FileOutputStream outputStream = new FileOutputStream(name);
            
            byte [] puffer = new byte [50000];
            int anzahl;
            while ((anzahl = stream.read(puffer))> 0){
                outputStream.write(puffer, 0, anzahl);
            }
            outputStream.flush();
            stream.close();
            outputStream.close();
        }
        Uri uri = Uri.parse("file://" + datei.getAbsolutePath());
        return uri;
    }
}
 
Zuletzt bearbeitet von einem Moderator: