2009-11-16 6 views
11

Mi piacerebbe mostrare un png o jpg che ho scaricato dal prossimo in un intento di visualizzatore di immagini, ma non riesco a farlo funzionare.Visualizza l'immagine nell'intenzione ACTION_VIEW?

Bitmap bmp = getImageBitmap(jpg); 
String path = getFilesDir().getAbsolutePath() + "/test.png"; 
File file = new File(path); 
FileOutputStream fos = new FileOutputStream(file); 
bmp.compress(CompressFormat.PNG, 100, fos); 
fos.close(); 

Intent intent = new Intent(); 
intent.setAction(android.content.Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(new File(path)), "image/png"); 
startActivity(intent); 

So che la bitmap viene scaricato ok (utilizzare la stessa routine per fornirla le mie istanze ImageView altrove nella mia app) - Credo che sia scritto in un file ok, posso vedere sul disco e la dimensione del file è corretta. L'intento è lanciato, ma viene generata un'eccezione:

ERRORE/ImageManager (1345): got eccezione decodifica bitmap java.lang.NullPointerException

poi la nuova attività appena ci si siede, in bianco. Come funziona?

risposta

24

Check out Android issue 2092 sembra simile a quello che stai descrivendo. Il problema afferma che "Bitmap.compress() non riesce per i file PNG salvati nella Modalità colore indicizzata (invece della modalità colore RGB)", tuttavia il primo commentatore pensa che "sembra che non sia un problema di colore indicizzato ma un problema PNG. "

Sembra che il codice è bene, confrontarlo con questo frammento di codice Android:

Intent intent = new Intent(); 
intent.setAction(android.content.Intent.ACTION_VIEW); 
File file = new File("/sdcard/test.mp4"); 
intent.setDataAndType(Uri.fromFile(file), "video/*"); 
startActivity(intent); 

Intent intent = new Intent(); 
intent.setAction(android.content.Intent.ACTION_VIEW); 
File file = new File("/sdcard/test.mp3"); 
intent.setDataAndType(Uri.fromFile(file), "audio/*"); 
startActivity(intent); 
+1

Se voglio riprodurre più numero di video uno a uno come può riprodurre un video dopo un altro è possibile intento (, "video/*"); – andrewww

+3

@andrewww ottima domanda, penso che dovresti chiederlo come una nuova domanda. Non ne sono sicuro, ma sono sicuro che qualcuno qui lo saprà. Non lo vedranno mai in questo commento però. –

4

Un altro problema potrebbe essere permessi sul file. In genere le tue/data/data/[app]/directory non sono leggibili da tutto il mondo e sono di proprietà delle tue applicazioni "app_XX" utente/gruppo. Assicurati che i tuoi permessi siano corretti, o assicurati che il file sia in una posizione che entrambe le applicazioni possano leggere (emms o sd card)