Próbuję uzyskać obiekt FileInputStream
na obrazie wybranym przez użytkownika z galerii obrazów. Jest to android URI
zwrócony przez android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI
Android - w jaki sposób mogę przekonwertować obiekt android.net.Uri na obiekt java.net.URI?
treści: // media/zewnętrzna/images/media/3
Kiedy próbuję skonstruować java URI obiektu z tego obiektu, otrzymuję IllegalArgumentException z opisem wyjątków Oczekiwany system plików w URI: treść: // media/zewnętrzne/images/media/3 natomiast android URI pokazuje schemat jak zawartości
Nigdy nie znalazł rozwiązanie dla pierwotnego pytania. Ale jeśli chcesz strumień bajtów obrazu w galerii zdjęć, ten fragment kodu to zrobi.
Bitmap bitmap = Media.getBitmap(getContentResolver(), imageUri);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
ByteArrayInputStream fileInputStream = new ByteArrayInputStream(bytes.toByteArray());
Dzięki. Próbowałem tego. Daje wyjątek (java.net.URI powinien mieć poprawny schemat) – lostInTransit
jest to błędne i zakończy się niepowodzeniem, jeśli identyfikator URI zawiera znaki, które wymagają kodowania (np. Spacja). android.net.Uri.toString() dekoduje zakodowane znaki, a java.net.URI rzuci wyjątek, jeśli spróbujesz skonstruować go na niezakodowanym łańcuchu. poprawne rozwiązanie 'huri = new java.net.URI (URLEncoder.encode (auri.toString()," UTF-8 ");' –
@Jeffrey: Uri.toString() zwraca zakodowane znaki na moim Androidzie 4.1.2 urządzenie –