Possiedo un provider di contenuti personalizzato per il mio set di applicazioni Android e una delle cose che è necessario esporre è un piccolo array di byte (20-30 KiB). L'URI per questi blob assomiglia:Passaggio blob binario tramite un provider di contenuti
content://my.authority/blob/#
dove #
è il numero di riga; il cursore risultante ha la colonna standard _id
e una colonna di dati. Io sto usando un MatrixCursor
nel metodo del provider query()
:
byte[] byteData = getMyByteData();
MatrixCursor mc = new MatrixCursor(COLUMNS);
mc.addRow(new Object[] { id, byteData });
Più tardi, nella domanda di consumo dei dati, lo faccio:
Cursor c = managedQuery(uri, null, null, null, null);
c.moveToFirst();
byte[] data = c.getBlob(c.getColumnIndexOrThrow("data"));
Tuttavia, i dati non contiene il contenuto del mio byte originale matrice; piuttosto, contiene qualcosa come [[email protected]
, che sembra più l'indirizzo dell'array che il contenuto. Ho provato a racchiudere l'array di byte in un'implementazione di java.sql.Blob
, immaginando che potrebbe essere in cerca di questo poiché il sottosistema del content provider è stato scritto per essere facile da usare con SQLite, ma non è stato di aiuto.
Qualcuno ha ottenuto che funzioni? Se i dati erano nel file system, ci sono metodi in ContentProvider
che potrei usare per fornire un client InputStream
marshalling al client, ma i dati che sto tentando di inviare vivi come risorsa nell'APK del content provider.
BTW Mi rivolgo a una versione piuttosto vecchia (Android-3) se è importante. – user308405
Capisco che tu abbia risolto questo problema. Qualche possibilità che tu condivida con il resto di noi? –