Na platformách Android, jak mohu převést android.net.Uri objekt java.net.URI objekt?

hlasů
45

Snažím se získat FileInputStreamobjekt na snímku, který uživatel vybere z obrazárny. To je android URIvrácenéandroid.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI

Obsah: // media / externí / images / media / 3

Když se snažím postavit java URI objektu z tohoto objektu, objeví se IllegalArgumentException s popisem výjimky očekávané schématu souborů v URI: obsah: // media / externí / images / media / 3 , zatímco android URI znázorňuje schéma jako obsah

Nikdy našel řešení pro původní otázce. Ale pokud chcete, aby byte proud obraz v galerii obrázků, tento kus kódu, udělá to.

Bitmap bitmap = Media.getBitmap(getContentResolver(), imageUri);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
ByteArrayInputStream fileInputStream = new ByteArrayInputStream(bytes.toByteArray());
Položena 18/02/2009 v 06:05
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
41

Dalo by se použít toStringmetodu android Uriv kombinaci Stringse sídlem konstruktoru Java URI.

android.net.Uri auri = new android.net.Uri(what ever);
java.net.URI juri = new java.net.URI(auri.toString());

Android URI | Java URI

Odpovězeno 18/02/2009 v 07:03
zdroj uživatelem

hlasů
39

Našel správný způsob otevřít InputStream z obsahu URI:

InputStream fileInputStream=yourContext.getContentResolver().openInputStream(uri);

To je vše!

Odpovězeno 24/04/2009 v 07:03
zdroj uživatelem

hlasů
2

Existuje řešení na původní otázku (převést URI URI):

  1. Získat cestu skutečné souboru (vypadat tento kód: Získejte název a cestu z URI z mediastore )

  2. Získat URI pomocí skutečnou cestu a konstruktor: URI (String uri)

Pokud potřebujete více informací, podívejte se zde:

Jak odstranit video zaznamenané pomocí záměru s ACTION_VIDEO_CAPTURE?

Odpovězeno 30/06/2011 v 12:45
zdroj uživatelem

hlasů
1

Hlasoval jsem pro odpověď jgilrincon je. Nemohu komentovat z důvodu nízkého pověsti, a tady je nějaké další informace - můžete použít FileHelper.java z projektu Apache Cordova, že má funkce, které potřebujete pro zacházení s ním od Uri řetězců spisu, s ohledem na mediastore stejně (a složka app majetek )

Zejména tento způsob umožňuje InputStream od Uri:

public static InputStream getInputStreamFromUriString(String uriString, Activity cordova)
Odpovězeno 19/09/2013 v 19:43
zdroj uživatelem

hlasů
0

Vzhledem k tomu, String stavění nefunguje Zkoušeli jste právě to vaše vlastní konstrukci?

android.net.URI auri = new android.net.URI(what ever);
java.net.URI juri = new java.net.URI(auri.getSchema(),
                                     auri.getSchemaSpecificPart(),
                                     auri.getFragment());

Také možná budete chtít zkontrolovat, že vaše stále platná data z třídy Android URI. Mezi dokumenty uvedené v mé další odpovědi diskutovat o tom, jak to dělá skoro žádnou kontrolu chyb. V případě, že je vlastně chyba třída prostě vyplivne odpadky stejně a nevyvolává žádné výjimky. Což by mohlo velmi pravděpodobně důvod, proč java třída, která nemá dělat ověření hází výjimku.

Odpovězeno 19/02/2009 v 15:15
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more