Возвращая карту памяти InputStream от поставщика контента? - PullRequest
5 голосов
/ 09 октября 2009

На стороне клиента потребителя контент-провайдера я могу сделать что-то вроде этого, чтобы получить правильный InputStream для чтения картинки:

InputStream is = getContentResolver().openInputStream(pictureUri);

Это хороший API, и на стороне сервера фактический поставщик контента приведет к вызову:

public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
  // Open a proper ParcelFileDescriptor, most likely using openFileHelper(uri, mode)
}

Но что, если изображение, сопоставленное с URI, не находится в файловой системе, а является ресурсом памяти или создается на лету.

Могу ли я создать сопоставленную память File или InputStream или что-нибудь еще, чтобы мне не требовалось сохранять временный файл на диск, чтобы иметь возможность вернуть его потребителю моего поставщика контента?

Ответы [ 2 ]

1 голос
/ 06 февраля 2013

Начиная с Android-9, вы можете создать канал, используя ParcelFileDescriptor. Вы можете заполнить его до 64 КБ и покончить с этим, или вы можете настроить другой поток для его заполнения после прочтения. Смотрите ответ здесь для более подробной информации:

Пользовательский ContentProvider - openInputStream (), openOutputStream ()

1 голос
/ 10 октября 2009

Это сложно. Вы можете иметь возможность использовать все, что может использовать интерфейс Socket. Я этого не делал, но вот что заставляет меня так думать:

http://developer.android.com/reference/android/os/ParcelFileDescriptor.html#fromSocket(java.net.Socket)

А теоретически сокет может быть интернет-ресурсом или почти всем ... если вы готовы работать на уровне сокетов. Я бы, наверное, просто сдался и создал временный файл. Возможно, это делает меня трусом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...