Interfejsy API dostawcy treści/resolwera zapewniają skomplikowany, ale niezawodny sposób przesyłania danych między procesami przy użyciu metod URI i openInputStream()
i openOutputStream()
. Dostawcy niestandardowych treści mają możliwość zastąpienia metody openFile()
za pomocą niestandardowego kodu, aby skutecznie rozwiązać URI w postaci Stream
; jednak sygnatura metody openFile()
ma typ zwracany ParcelFileDescriptor
i nie jest jasne, w jaki sposób można wygenerować poprawną reprezentację dynamicznie generowanej zawartości, aby powrócić z tej metody.Niestandardowy ContentProvider - openInputStream(), openOutputStream()
Returning a memory mapped InputStream from a content provider?
Czy istnieją przykłady realizacji ContentProvider.openFile()
metodę zawartości dynamicznej w istniejącej bazie kodu? Jeśli nie, możesz zasugerować kod źródłowy lub proces, aby to zrobić?
Czy planuje się zamienić konwersję między plikiem pamięci i w przyszłym? Coś w tym kierunku byłoby ładniejsze niż zaśmiecanie/zanieczyszczanie systemu plików plikami tymczasowymi o nieosiągalnym czasie życia. Może jest jakiś sposób, aby wykryć zamknięcie strumienia w ramach dostawcy treści, który może zapewnić nieco bezpieczniejszy sposób oczyszczania po sobie? Jestem zaniepokojony wysyłaniem załączników do klienta pocztowego (gmail/standaed), chociaż jestem pewien, że istnieją inne miejsca, w których mogą wystąpić te problemy. – hannasm
Tak, MemoryFile.java ma obecnie 'publiczną metodę ParcelFileDescriptor getParcelFileDescriptor()'. Zostało to popełnione w ramach Doughnut, ale jak powiedział Jeff, wciąż nie jest jeszcze sfinalizowane. Potwierdziłem, że "koncepcja" przynajmniej działa i może być teraz wykonana za pomocą refleksji. Jest bardzo brudny i niezalecany :) Niestety, nawet 'ParcelFileDescriptor.fromSocket()' nie może być użyty, ponieważ 'Memory.isMemoryFile()' zgłasza wyjątek, ponieważ gniazdo nie jest ani PFD, ani plikiem pamięci. – Joe
Ostrożnie z MemoryFile. Jeśli rozumiem to poprawnie, przechowuje całą zawartość pliku w pamięci, więc nie można używać plików większych niż dostępna pamięć. –