Autore Topic: Aprire un file pdf con Intent  (Letto 626 volte)

Offline ValerioAdo

  • Utente normale
  • ***
  • Post: 323
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ascend g525
  • Sistema operativo:
    windows 8.1
Aprire un file pdf con Intent
« il: 25 Marzo 2015, 09:12:00 CET »
0
Salve a tutti!

Con la mia applicazione scarico un file formato .pdf in background che dopo vorrei aprire , il download riesce e mi mette il file pdf in una cartella che gli dico io, ma al momento di aprire il file l'intent non parte, l'app non crasha e da debug non mi da errori ( anche perché se sto usando il mio device come debbuger non mi salva il pdf in memoria).

Questo è il codice che uso per il download e il salvataggio in una cartella:
Codice (Java): [Seleziona]
  String fileUrl = strings[0];   // -> stringapdf
            String fileName = strings[1];  // -> Valori.dbNewsVolantino[ID]
            String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
            File folder = new File(extStorageDirectory, "Cartellapdf");
            folder.mkdir();

            File pdfFile = new File(folder, fileName);

            try{
                pdfFile.createNewFile();
            }catch (IOException e){
                e.printStackTrace();
            }
            FileDownloader.downloadFile(fileUrl, pdfFile);
            return null;
        }

        protected void onPostExecute(String result) {

            openpdf();

        }

e questo è l'intent:

Codice (Java): [Seleziona]
 File pdfFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Cartellapdf/" + Valori.dbNewsVolantino[ID]);  // -> filename =  Valori.dbNewsVolantino[ID]
            Uri path = Uri.fromFile(pdfFile);
            Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
            pdfIntent.setDataAndType(path, "application/pdf");
            pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

            try{
                startActivity(pdfIntent);
            }catch(ActivityNotFoundException e){
                Toast.makeText(Notizia.this, "Nessuna Applicazione per leggere i pdf", Toast.LENGTH_SHORT).show();
            }

Qualche suggerimento?

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Aprire un file pdf con Intent
« Risposta #1 il: 25 Marzo 2015, 09:30:36 CET »
0
metti un Log dentro l'ultimo codice postato, che in teoria dovrebbe essere openpdf();

Offline ValerioAdo

  • Utente normale
  • ***
  • Post: 323
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ascend g525
  • Sistema operativo:
    windows 8.1
Re:Aprire un file pdf con Intent
« Risposta #2 il: 25 Marzo 2015, 11:10:45 CET »
0
eh ok ho messo il log però essendo il device in debug non mi da accesso alla memoria, quindi mi da questo logcat:
Codice: [Seleziona]
03-25 11:08:53.784  29721-29885/com.adorni.baisoapp W/System.err﹕ java.io.IOException: open failed: EACCES (Permission denied)
03-25 11:08:53.804  29721-29885/com.adorni.baisoapp W/System.err﹕ at java.io.File.createNewFile(File.java:940)
03-25 11:08:53.804  29721-29885/com.adorni.baisoapp W/System.err﹕ at com.adorni.baisoapp.Notizia$DownloadFile.doInBackground(Notizia.java:163)
03-25 11:08:53.804  29721-29885/com.adorni.baisoapp W/System.err﹕ at com.adorni.baisoapp.Notizia$DownloadFile.doInBackground(Notizia.java:150)
03-25 11:08:53.804  29721-29885/com.adorni.baisoapp W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:287)
03-25 11:08:53.804  29721-29885/com.adorni.baisoapp W/System.err﹕ at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
03-25 11:08:53.804  29721-29885/com.adorni.baisoapp W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:137)
03-25 11:08:53.804  29721-29885/com.adorni.baisoapp W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
03-25 11:08:53.804  29721-29885/com.adorni.baisoapp W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
03-25 11:08:53.804  29721-29885/com.adorni.baisoapp W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
03-25 11:08:53.804  29721-29885/com.adorni.baisoapp W/System.err﹕ at java.lang.Thread.run(Thread.java:856)
03-25 11:08:53.804  29721-29885/com.adorni.baisoapp W/System.err﹕ Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
03-25 11:08:53.804  29721-29885/com.adorni.baisoapp W/System.err﹕ at libcore.io.Posix.open(Native Method)
03-25 11:08:53.804  29721-29885/com.adorni.baisoapp W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
03-25 11:08:53.804  29721-29885/com.adorni.baisoapp W/System.err﹕ at java.io.File.createNewFile(File.java:933)
03-25 11:08:53.814  29721-29885/com.adorni.baisoapp W/System.err﹕ ... 9 more
03-25 11:08:54.014  29721-29885/com.adorni.baisoapp W/System.err﹕ java.io.FileNotFoundException: /storage/sdcard0/BaisoNewsPdf/PresentazioneFelinoAPP.pdf: open failed: EACCES (Permission denied)
03-25 11:08:54.014  29721-29885/com.adorni.baisoapp W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:416)
03-25 11:08:54.014  29721-29885/com.adorni.baisoapp W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
03-25 11:08:54.014  29721-29885/com.adorni.baisoapp W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
03-25 11:08:54.014  29721-29885/com.adorni.baisoapp W/System.err﹕ at com.adorni.baisoapp.FileDownloader.downloadFile(FileDownloader.java:28)
03-25 11:08:54.014  29721-29885/com.adorni.baisoapp W/System.err﹕ at com.adorni.baisoapp.Notizia$DownloadFile.doInBackground(Notizia.java:167)
03-25 11:08:54.014  29721-29885/com.adorni.baisoapp W/System.err﹕ at com.adorni.baisoapp.Notizia$DownloadFile.doInBackground(Notizia.java:150)
03-25 11:08:54.014  29721-29885/com.adorni.baisoapp W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:287)
03-25 11:08:54.014  29721-29885/com.adorni.baisoapp W/System.err﹕ at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
03-25 11:08:54.014  29721-29885/com.adorni.baisoapp W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:137)
03-25 11:08:54.014  29721-29885/com.adorni.baisoapp W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
03-25 11:08:54.014  29721-29885/com.adorni.baisoapp W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
03-25 11:08:54.014  29721-29885/com.adorni.baisoapp W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
03-25 11:08:54.014  29721-29885/com.adorni.baisoapp W/System.err﹕ at java.lang.Thread.run(Thread.java:856)
03-25 11:08:54.014  29721-29885/com.adorni.baisoapp W/System.err﹕ Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
03-25 11:08:54.024  29721-29885/com.adorni.baisoapp W/System.err﹕ at libcore.io.Posix.open(Native Method)
03-25 11:08:54.024  29721-29885/com.adorni.baisoapp W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
03-25 11:08:54.024  29721-29885/com.adorni.baisoapp W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:400)
03-25 11:08:54.024  29721-29885/com.adorni.baisoapp W/System.err﹕ ... 12 more

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Aprire un file pdf con Intent
« Risposta #3 il: 25 Marzo 2015, 11:16:47 CET »
0
1 - quando io uso il telefono attaccato col cavo al pc e debuggo, la memoria del telefono è utilizzabile al 100% dal pc e dal telefono. Infatti siccome ho necessità di scrivere anche io su un file, per vedere se la scrittura è andata a buon fine, apri direttamente il file dal telefono con un qualsiasi file manager. Ora, ho un moto x con memoria interna. Non ho telefoni con sd da qualche anno.

2 - Sei sicuro di avere messo nel manifest  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> ?

3 -
Codice (Java): [Seleziona]
java.io.FileNotFoundException: /storage/sdcard0/BaisoNewsPdf/PresentazioneFelinoAPP.pdf: open failed: EACCES (Permission denied), Sembra segnalare che non trova il file. Probabilmente è relativo al punto 2

Offline ValerioAdo

  • Utente normale
  • ***
  • Post: 323
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ascend g525
  • Sistema operativo:
    windows 8.1
Re:Aprire un file pdf con Intent
« Risposta #4 il: 25 Marzo 2015, 11:48:57 CET »
0
Si avevo inserito nel manifest il permesso.
Ho cambiato il codice in questo modo e ora funziona:
Codice (Java): [Seleziona]
 private class DownloadFile extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... strings) {

            String result="";

            String fileUrl = strings[0];   // -> stringapdf
            String fileName = strings[1];  // -> Valori.dbNewsVolantino[ID]
            String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
            File folder = new File(extStorageDirectory, "Cartellapdf");
            folder.mkdir();

            File pdfFile = new File(folder, fileName);

            try{
                pdfFile.createNewFile();
            }catch (IOException e){
                e.printStackTrace();
            }
            FileDownloader.downloadFile(fileUrl, pdfFile);
            return result;
        }

        protected void onPostExecute(String result) {

            openpdf();

        }

        public void openpdf(){

            Toast.makeText(Notizia.this, "test", Toast.LENGTH_SHORT).show();
            File pdfFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Cartellapdf/" + Valori.dbNewsVolantino[ID]);  // -> filename =  Valori.dbNewsVolantino[ID]
            Uri path = Uri.fromFile(pdfFile);
            Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
            pdfIntent.setDataAndType(path, "application/pdf");
            pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

            try{
                startActivity(pdfIntent);
            }catch(ActivityNotFoundException e){
                Toast.makeText(Notizia.this, "Nessuna Applicazione per leggere i pdf", Toast.LENGTH_SHORT).show();
            }
        }
    }

probabilmente non accedeva all' onPostExecute

Offline tonno16

  • Utente storico
  • *****
  • Post: 1228
  • Respect: +59
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Aprire un file pdf con Intent
« Risposta #5 il: 25 Marzo 2015, 12:11:43 CET »
0
Completa il toast con un link al play store per un lettore di pdf