Próbuję otworzyć obraz / obraz we wbudowanej aplikacji Galerii z poziomu mojej aplikacji.
Mam identyfikator URI obrazu (obraz znajduje się na karcie SD).
Masz jakieś sugestie?
android
image
android-intent
gallery
Michael Kessler
źródło
źródło
Odpowiedzi:
To kompletne rozwiązanie. Właśnie zaktualizowałem ten przykładowy kod o informacje podane w odpowiedzi poniżej przez @mad. Sprawdź również poniższe rozwiązanie z @Khobaib wyjaśniające, jak postępować z obrazami Picasa.
Aktualizacja
Właśnie przejrzałem moją oryginalną odpowiedź i stworzyłem prosty projekt Android Studio, który możesz pobrać z github i zaimportować bezpośrednio do systemu.
https://github.com/hanscappelle/SO-2169649
(zwróć uwagę, że wybór wielu plików nadal wymaga pracy)
Wybór pojedynczego obrazu
Dzięki obsłudze obrazów z eksploratorów plików dzięki wściekłości użytkownika.
Wybieranie wielu zdjęć
Ponieważ ktoś poprosił o te informacje w komentarzu, lepiej jest zebrać informacje.
Ustaw dodatkowy parametr
EXTRA_ALLOW_MULTIPLE
w zamiarze:I w kontroli obsługi wyników dla tego parametru:
Pamiętaj, że jest to obsługiwane tylko przez interfejs API w wersji 18+.
źródło
Oto aktualizacja dobrego kodu opublikowanego przez hcpl. ale działa to z menedżerem plików OI, menedżerem plików astro ORAZ galerią multimediów (testowane). więc myślę, że będzie działać z każdym menedżerem plików (czy jest wiele innych niż wymienione?). wprowadził kilka poprawek do kodu, który napisał.
źródło
else return null;
wgetPath(Uri uri)
celureturn uri.getPath();
i pozbyć się pierwszegofilemanagerstring = selectedImageUri.getPath();
czeku. W ten sposób wystarczy wykonać jedno połączeniegetPath(Uri)
i odzyskać ścieżkę (bez względu na to, czy użyto Galerii czy menedżera plików).Metody hcpl działają doskonale przed KitKat, ale nie działają z interfejsem API DocumentsProvider. W tym celu wystarczy postępować zgodnie z oficjalnym samouczkiem Androida dla dostawców dokumentów: https://developer.android.com/guide/topics/providers/document-provider.html -> otwórz dokument, sekcja Bitmapy.
Po prostu użyłem kodu hcpl i go rozszerzyłem: jeśli plik z pobraną ścieżką do obrazu zgłasza wyjątek, wywołuję tę funkcję:
Testowane na Nexusie 5.
źródło
podstawa z powyższym kodem, przedstawiłem kod jak poniżej, może być bardziej odpowiedni:
źródło
Przejrzałem rozwiązanie od @hcpl & @mad. Rozwiązanie hcpl dobrze obsługuje lokalny obraz w galerii, a mad zapewniło lepsze rozwiązanie - pomaga również załadować obraz OI / Astro / Dropbox. Ale w mojej aplikacji podczas pracy nad biblioteką Picasa zintegrowaną z Galerią Android oba rozwiązania zawodzą.
Przeszukałem i przeanalizowałem trochę i ostatecznie znalazłem lepsze i eleganckie rozwiązanie, które pokonuje to ograniczenie. Dzięki Dimitarowi Darazhanskiemu za jego bloga, który pomógł mi w tym przypadku, zmodyfikowałem trochę, aby ułatwić zrozumienie. Oto moje rozwiązanie -
Sprawdź to i daj mi znać, jeśli jest z tym jakiś problem. Przetestowałem to i działa dobrze w każdym przypadku.
Mam nadzieję, że to pomoże wszystkim.
źródło
Zakładając, że masz folder obrazów w katalogu karty SD tylko dla obrazów.
Następnie możesz zdecydować, co chcesz zrobić z treścią w swojej aktywności.
To był przykład pobrania nazwy ścieżki obrazu, przetestuj to za pomocą kodu, aby upewnić się, że poradzisz sobie z powracającymi wynikami. W razie potrzeby możesz zmienić kod, aby lepiej dopasować go do swoich potrzeb.
Moja rada to próba poprawnego działania pobierania obrazów, myślę, że problemem jest treść dostępu do obrazów na karcie SD. Spójrz na Wyświetlanie obrazów na karcie SD .
Jeśli możesz to uruchomić, prawdopodobnie na przykładzie dostarczenia poprawnego dostawcy, powinieneś być w stanie znaleźć sposób obejścia tego kodu.
Informuj mnie na bieżąco, aktualizując to pytanie wraz z postępami. Powodzenia
źródło
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.GET_CONTENT typ=file:///sdcard/images/* }
startActivityforResult
i podać działanie. Właśnie to miałem na myśli, decydując, co dalej, mój zły.startActivityForResult(intent, 1);
i nadal otrzymuję ten błąd ... Ten kod znajduje się poza działaniem, ale mam odwołanie do działania i wywołujęstartActivityForResult
metodę w tym odwołaniu - może to jest powód?1
wasze przejście? SpróbujIMAGE_PICK
Intent.ACTION_PICK
zamiastIntent.ACTION_GET_CONTENT
. Co masz na myśliIMAGE_PICK
? Nie ma takiej stałej. Też próbowałemintent.setData(Uri.fromFile(new File("/sdcard/image/")));
. Próbowałem wszystkich możliwych kombinacji tych elementów i nic nie działa ...to moja wizyta w tym temacie, zbieranie wszystkich informacji tutaj oraz innych odpowiednich pytań o przepełnienie stosu. Zwraca obrazy od niektórych dostawców, jednocześnie obsługując warunki braku pamięci i obracania obrazu. Obsługuje galerię, Picasę i menedżery plików, takie jak drop box. Użycie jest proste: jako dane wejściowe konstruktor otrzymuje moduł rozpoznawania treści i identyfikator użytkownika. Dane wyjściowe to końcowa mapa bitowa.
Bibliografia:
źródło
Istnieją dwa przydatne samouczki na temat próbnika obrazów z kodem źródłowym do pobrania tutaj:
Jak utworzyć Android Image Picker
Jak wybrać i przyciąć obraz na Androidzie
Jednak aplikacja zostanie kiedyś zmuszona do zamknięcia, możesz to naprawić, dodając atrybut android: configChanges do głównej aktywności w pliku manifestu, np .:
Wygląda na to, że interfejs API kamery stracił kontrolę nad orientacją, więc to pomoże. :)
źródło
Krok 1 Kod do otwarcia galerii, aby wybrać zdjęcia:
Krok 2 Kod do pobierania danych
onActivityResult
:źródło
READ_EXTERNAL_STORAGE
Aby wyświetlić obrazy i filmy, spróbuj:
źródło
Na wszelki wypadek to pomaga; Robię to, aby uzyskać mapę bitową:
źródło
Powyższe odpowiedzi są poprawne. Napotkałem inny problem, w którym w HTC M8 moja aplikacja ulega awarii podczas wybierania obrazu z galerii. Dostaję wartość zerową dla ścieżki obrazu. Naprawiłem i zoptymalizowałem za pomocą następującego rozwiązania. w metodzie onActivityResult
}
źródło
źródło
źródło
Pobierz określony typ pliku
Ten przykład otrzyma kopię obrazu.
Otwórz określony typ pliku
W przypadku wersji 4.4 lub nowszej żądasz otwarcia pliku zarządzanego przez inną aplikację
Pierwotnym źródłem
źródło
Oprócz poprzednich odpowiedzi, jeśli masz problemy z uzyskaniem właściwej ścieżki (np. AndroZip), możesz użyć tej opcji:
źródło
Proszę znaleźć odpowiedź na wybór pojedynczego obrazu z galerii
źródło
Najszybszy sposób na otwarcie obrazu z galerii lub aparatu.
Oryginalne odniesienie: programowo pobierz obraz z galerii w Androidzie
Poniższa metoda otrzyma obraz z galerii lub kamery i pokaże go w ImageView. Wybrany obraz zostanie zapisany wewnętrznie.
kod dla xml
Klasa JAVA
źródło
oto mój przykład, może nie być dokładnie tak, jak twój przypadek.
zakładając, że otrzymujesz format base64 od dostawcy interfejsu API, podaj mu nazwę pliku i rozszerzenie pliku, zapisz go w określonej lokalizacji w systemie plików.
Nie zapomnij ustawić właściwego dostawcy plików na pierwszym miejscu w AndroidManifest.xml
gdzie ścieżka do pliku to xml w ... / res / xml / file_path.xml
Krótko mówiąc, najpierw przygotuj dostawcę plików, przekaż Uri do Intent dla znanego i dostępnego źródła obrazu, w przeciwnym razie zapisz zdjęcie w żądanej lokalizacji, a następnie przekaż lokalizację (jako Uri) do Intent.
źródło