2012-11-25 7 views
6

Ich benutze diese Absicht ein Foto Benutzer wählen zu lassen:`getContentResolver() openInputStream (uri)` wirft FileNotFoundException

Intent intent = new Intent(Intent.ACTION_PICK, 
          MediaStore.Images.Media.INTERNAL_CONTENT_URI); 
startActivityForResult(intent, INTENT_SELECT_PHOTO); 

Und in onActivityResult:

Uri uri = data.getData(); 
InputStream inputStream = getContentResolver().openInputStream(uri); 

Aber es wirft FileNotFoundException auf einige Android-Geräte.

Der Wert uri:

content://media/external/images/media/26467 

Die Ausnahme geworfen:

java.io.FileNotFoundException: No such file or directory 

Und es ist sehr seltsam, dass es nicht diese Ausnahme auf einige andere Android-Geräte werfen. Was verursacht diesen Fehler und wie kann er behoben werden?

Antwort

2
MediaStore.Images.Media.INTERNAL_CONTENT_URI 

für Bilder auf dem lokalen Gerät oder

MediaStore.Images.Media.EXTERNAL_CONTENT_URI 

für Bilder auf der SD-Karte.

Sind Sie sicher, dass Sie beide richtig adressieren? Die interne/externe Behandlung variiert mit dem Gerät, vielleicht ist das der Grund, warum es an einigen, aber nicht an anderen arbeitet.

+3

Ich habe gerade gefunden, weil die tatsächlichen Bilder gelöscht werden, aber sie haben Caches in der Foto-Viewer-Anwendung. – Freewind

+0

Gut zu wissen, auf der Suche nach einem Problem lief ich in etwas, das ein damit verbundenes Problem erklärt http://code.google.com/p/android/issues/detail?id=12508 – Shakti

+0

Right Freewind, hatte ich genau diesen Code/Fehler beim Browsen Mein Download-Ordner für eine .TXT-Datei und dort, wo zu Downloads und beide waren ungefähr gleich groß, eine arbeitete nicht. Vielen Dank! – tom

1

Ich habe das gleiche Problem, aber ich habe es gelöst, indem ich die setImageURI-Methode von ImageView verwendet habe.

Sie nicht den folgenden Code verwenden:

InputStream inputStream = getContentResolver().openInputStream(uri); 

Verwenden Sie einfach die folgende Funktion:

imageViewCustomer.setImageURI(data.getData()); 
-1

Verwenden Context.getContentResolver() openInputStream (Uri);.

Verwandte Themen