Как передать двоичные данные между двумя приложениями с помощью Content Provider? - PullRequest
1 голос
/ 07 января 2011

Мне нужно передать некоторые двоичные данные между двумя приложениями для Android с помощью Content Provider (sharedUserId не вариант).

Я бы предпочел не передавать данные (сохраненную игру в виде файла, небольшого размера <20 КБ) как файл (т. Е. Переопределять openFile ()), поскольку для этого потребуется некоторая сложная схема временного файла, чтобы справиться с параллелизмом с несколькими доступами контент-провайдера и запущенной игрой. </p>

Я хотел бы прочитать файл в память под блокировкой мьютекса, а затем передать двоичный массив самым простым способом. Как мне это сделать?

Кажется, создание файла в памяти невозможно из-за типа возврата openFile ().

query () должен вернуть курсор. Использование MatrixCursor невозможно, поскольку при чтении он применяет метод toString () ко всем сохраненным объектам.

Что мне нужно сделать? Реализовать собственный Курсор? Этот класс имеет 30 абстрактных методов. Читать файл, поместить его в базу данных SQLite и вернуть курсор?

Сложность этой, казалось бы, простой задачи ошеломляет.

Ответы [ 2 ]

2 голосов
/ 07 января 2011

Вы пробовали использовать потоки? Это будет работать

Из документации: «Если запись таблицы является URI содержимого: вы никогда не должны пытаться открыть и прочитать файл напрямую (во-первых, проблемы с разрешениями могут привести к сбою). Вместо этого вы должны вызвать ContentResolver.openInputStream (), чтобы получить объект InputStream что вы можете использовать для чтения данных. "

Ссылка: http://developer.android.com/guide/topics/providers/content-providers.html

Может быть, что-то вроде этого, если вы используете Intents:

<code>protected void onActivityResult(int requestCode, int resultCode, Intent intent){
  InputStream is = getContentResolver().openInputStream(intent.getData())
...
2 голосов
/ 07 января 2011

Почему бы не предоставить данные в виде строки Base64?

...