2009-10-09 2 views
5

Le côté client d'un fournisseur de contenu consommateur, je peux faire quelque chose comme ça, pour obtenir un InputStream approprié pour lire l'image:Renvoyer une mémoire mappée InputStream à partir d'un fournisseur de contenu?

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

Il est une API agréable, et sera sur le côté serveur, le réel résultat fournisseur de contenu dans un appel à:

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

mais si l'image cartographiée à l'URI est de ne pas être trouvé sur le système de fichiers, mais comme une ressource mémoire ou générée à la volée. Puis-je créer une mémoire mappée File ou InputStream, ou autre chose, de sorte que je n'ai pas besoin d'enregistrer un fichier temporaire sur le disque, juste pour pouvoir le renvoyer à mon consommateur de fournisseur de contenu?

Répondre

1

C'est dur. Vous pouvez être en mesure de s'en tirer en utilisant tout ce qui peut utiliser une interface Socket. Je ne l'ai pas fait, mais c'est ce qui me fait penser cela:

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

Et un Socket pourrait, en théorie, être une ressource Internet, ou plus rien ... si vous êtes prêt à travailler au niveau Socket. Je vais probablement abandonner et créer le fichier temporaire. Peut-être que cela me rend un lâche. A partir d'android-9, vous pouvez créer un tube en utilisant ParcelFileDescriptor.

+0

qui est une solution qui pourrait fonctionner, mais pas comme je veux le faire. Je veux vraiment pouvoir utiliser la méthode 'ContentResolver # openInputStream()' pour lire toutes sortes de données distantes. Indépendamment de la façon dont le serveur crée/obtient les données. Il s'agit de ne pas exposer l'implémentation du serveur au client. – PeyloW

+0

@PeyloW avez-vous trouvé une solution? Je suis à la recherche d'une solution aussi. – Sunny

+0

@Sunny Aucun qui n'est pas un hack. J'ai donc fini par enregistrer des fichiers temporaires et envoyer des descripteurs de fichiers. – PeyloW

Questions connexes