J'ai un fournisseur de contenu qui est personnalisé pour mon ensemble d'applications Android, et l'une des choses qu'il doit exposer est un petit tableau d'octets (20-30 KiB). L'URI de ces blobs ressemble:Passage d'un blob binaire via un fournisseur de contenu
content://my.authority/blob/#
où #
est le numéro de ligne; le curseur résultant a la colonne standard _id
et une colonne de données. J'utilise un MatrixCursor
dans query()
méthode du fournisseur:
byte[] byteData = getMyByteData();
MatrixCursor mc = new MatrixCursor(COLUMNS);
mc.addRow(new Object[] { id, byteData });
Plus tard, dans l'application de consommer les données, je fais:
Cursor c = managedQuery(uri, null, null, null, null);
c.moveToFirst();
byte[] data = c.getBlob(c.getColumnIndexOrThrow("data"));
Toutefois, les données ne contient pas le contenu de mon octet d'origine tableau; plutôt, il contient quelque chose comme [[email protected]
, qui ressemble plus à l'adresse du tableau que le contenu. J'ai essayé d'encapsuler le tableau d'octets dans une implémentation de java.sql.Blob
, en pensant que cela pourrait être utile puisque le sous-système de fournisseur de contenu a été écrit pour être facile à utiliser avec SQLite, mais cela n'a pas aidé.
Quelqu'un at-il obtenu ce travail? Si les données se trouvaient dans le système de fichiers, il existe des méthodes dans ContentProvider
que je pourrais utiliser pour fournir un InputStream
marshalled au client, mais les données que j'essaie de renvoyer en tant que ressource dans le fichier APK du fournisseur de contenu.
BTW Je cible une version assez ancienne (android-3) si c'est important. – user308405
Je comprends que vous avez résolu ce problème. Avez-vous une chance de le partager avec nous? –