Próbuję pobrać obraz z galerii.
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select picture"), resultCode );
Po powrocie z tego działania mam dane, które zawierają Uri. To wygląda jak:
content://media/external/images/1
Jak mogę przekonwertować tę ścieżkę na prawdziwą (tak jak „ /sdcard/image.png
”)?
Dzięki
android
image-gallery
davs
źródło
źródło
uri.getPath()
nie daje prawdziwą ścieżkę?Odpowiedzi:
Czy naprawdę musisz mieć fizyczną ścieżkę?
Na przykład
ImageView.setImageURI()
iContentResolver.openInputStream()
umożliwia dostęp do zawartości pliku bez znajomości jego prawdziwej ścieżki.źródło
Tym się właśnie zajmuję:
i:
UWAGA:
managedQuery()
metoda jest przestarzała, więc jej nie używam.Ostatnia edycja: ulepszenie. Powinniśmy zamknąć kursor !!
źródło
@Rene Juuse - powyżej w komentarzach ... Dzięki za ten link!
. kod umożliwiający uzyskanie rzeczywistej ścieżki jest nieco inny w przypadku różnych zestawów SDK, więc poniżej mamy trzy metody, które obsługują różne zestawy SDK.
getRealPathFromURI_API19 (): zwraca rzeczywistą ścieżkę dla API 19 (lub nowszego, ale nie testowane) getRealPathFromURI_API11to18 (): zwraca rzeczywistą ścieżkę dla API 11 do API 18 getRealPathFromURI_below11 (): zwraca rzeczywistą ścieżkę dla API poniżej 11
czcionka: http://hmkcode.com/android-display-selected-image-and-its-real-path/
UPDATE 2016 marzec
Aby naprawić wszystkie problemy ze ścieżką obrazów, próbuję utworzyć niestandardową galerię jako Facebook i inne aplikacje. Dzieje się tak, ponieważ możesz używać tylko plików lokalnych (prawdziwych plików, a nie wirtualnych lub tymczasowych), rozwiązuję wszystkie problemy z tą biblioteką.
https://github.com/nohana/Laevatein (ta biblioteka ma zrobić zdjęcie z aparatu lub wybrać z galerii, jeśli wybierzesz z galerii ma szufladę z albumami i po prostu pokaż pliki lokalne)
źródło
Uwaga To jest poprawa w odpowiedzi @ user3516549 i sprawdziłem to na Moto G3 z Androidem 6.0.1
Mam ten problem, więc próbowałem odpowiedzieć @ user3516549, ale w niektórych przypadkach nie działała poprawnie. Zauważyłem, że w systemie Android 6.0 (lub nowszym), kiedy zaczynamy zamiar wyboru obrazu z galerii, otworzy się ekran pokazujący ostatnie obrazy, gdy użytkownik wybierze obraz z tej listy, otrzymamy uri jako
podczas gdy jeśli użytkownik wybierze galerię z wysuwanej szuflady zamiast ostatniej, otrzymamy uri jako
Więc załatwiłem to
getRealPathFromURI_API19()
EDYCJA: jeśli próbujesz uzyskać ścieżkę obrazu do pliku na zewnętrznej karcie SD w wyższej wersji, sprawdź moje pytanie
źródło
EDYTUJ: Użyj tego rozwiązania tutaj: https://stackoverflow.com/a/20559175/2033223 Działa idealnie!
Po pierwsze, dziękuję za rozwiązanie @luizfelipetx
Trochę zmieniłem twoje rozwiązanie. To działa dla mnie:
Uwaga: otrzymaliśmy więc dokumenty i obraz, w zależności od tego, czy obraz pochodzi z „ostatnich”, „galerii” czy czegokolwiek. Więc najpierw wyodrębniam identyfikator obrazu, zanim go wyszukam.
źródło
Hii, oto mój kompletny kod do robienia zdjęć z kamery lub wichury
// Deklaracja mojej zmiennej
//Na kliknięcie
// treść metody
// I reszta
źródło
options.inSampleSize = calculateInSampleSize(options, 100, 100);
Pomogło mi to pobrać URI z Galerii i przekonwertować go na plik do przesłania Multipart
https://github.com/iPaulPro/aFileChooser/blob/master/aFileChooser/src/com/ipaulpro/afilechooser/utils/FileUtils.java
źródło