Я пишу приложение для Android, которое взаимодействует с сервисом RESTful.Этот веб-сервис по существу работает с файловой системой и предоставляет метаданные, а также CRUD-доступ к файлам.Мое приложение извлекает метаданные и предоставляет их сторонним приложениям через ContentProvider
.
Мне нужно добавить возможность сторонним приложениям, работающим на том же устройстве, что и мое приложение, обрабатывать реальные файлы, отправляя запросы в / из моего приложения (не напрямую с сервером).Это означает, что они должны либо отправлять, либо получать содержимое файлов (которые обычно являются XML или изображениями) через мое приложение.
Я подумал о двух подходах для реализации этого:
Вариант 1- Использование ContentProvider.openFile
Это кажется очевидным выбором для предоставления сторонним приложениям возможности читать файлы из моего ContentProvider
.Я думаю, что становится сложно, когда эти приложения должны создавать или обновлять файлы через мой ContentProvider.Мне понадобится обратный вызов, когда они будут готовы, чтобы узнать, когда отправить новый / измененный файл обратно на сервер.Я полагаю, что для этой цели я могу использовать FileObserver .
Вариант 2. Использование мессенджера через службу
При таком подходе я могу отправлять файлы между своимиприложения и клиентские приложения через Messenger
.Файлы должны быть пропущены через Bundle
, поэтому я не уверен, какой формат лучше для их передачи (File
, FileDescriptor
, байтовый массив, что-то еще ??).Я не знаю, может ли это вызвать проблемы, если файлы станут большими.
Вариант 3 - гибридный подход
- Использование папок на внешнем хранилище в качестве раскрывающегося окна
- Передача запросов CRUD и содержимого удаленного ящика через
Messenger
/ Service
- Используйте
ContentProvider
для хранения статуса запросов - Стороннее приложение получает обновления статуса через
ContentObserver
Резюме
Я думаю, что использование ContentProvider
было бы идеальным решением, но кажется, что API не полностью поддерживает мой вариант использования.Я обеспокоен тем, что попытка пойти по этому пути может привести к грязной реализации.Если я использую подходы Messenger
и Service
, я не уверен в самом надежном способе передачи файлов через Bundle
.
Гибридный подход кажется довольно надежным, но наиболее сложным для реализации.Файлы на самом деле не передаются, поэтому производительность должна быть хорошей.Однако, я боюсь, что это чрезмерная архитектура решения.
Каков наилучший подход для передачи файлов между приложениями, работающими на одном устройстве Android? Конечно, я открыт для других вариантовкоторый я не обрисовал в своем вопросе.