Écrire un accès privé fichier d'une autre application est le répertoire des fichiers
Les deux applications ont le même sharedUserId. Lorsque j'utilise ce code dans app1
context.openFileOutput("/data/data/org.me.app2/files/shared-data.dat", MODE_PRIVATE)
J'obtiens une exception en me disant que le fichier contient un séparateur de chemin.
Je suis en train d'écrire un fichier de app1 en app2 de stockage. (Je n'ai, bien sûr, assurez-vous que app2 les fichiers du répertoire existe en premier)
Idéalement, je voudrais écrire à un utilisateur spécifique du répertoire au lieu d'une application spécifique répertoire, mais je ne sais pas si cela peut être fait
OriginalL'auteur Bryan Field | 2010-11-30
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, ne JAMAIS utiliser un chemin d'accès complet à la mémoire de stockage interne comme
/data/data
. Laissez le système d'exploitation vous donner le chemin d'accès (par exemple, viaContext.getFilesDir()
ouEnvironment.getExternalStorageState()
). Ne pas faire d'hypothèse sur l'endroit où les données sont.Deuxièmement - vous déjà le faire! Contrairement à
File
,Context.openFileOutput
déjà ajoute/data/data/[package]
de votre chemin, de sorte que vous n'avez pas besoin de spécifier que. Il suffit de spécifier le nom de fichier.Si vous vous sentez vraiment qu'il est sûr et nécessaire, et si les deux applications partagent le même ID d'utilisateur à l'aide de android:sharedUserId dans le manifeste, vous pouvez obtenir un contexte de l'autre app à l'aide
Contexte.createPackageContext()
et l'utilisation CONTEXT_RESTRICTED, puis utilisez openFileOutput avec uniquement le nom de fichier.C'est généralement déconseillée. Vous devriez ne jamais les écrire dans une autre application au stockage privé! MODE_PRIVATE spécifiquement ne seront pas vous faire beaucoup de bien; - les données ne seraient pas lisibles par l'application d'autres! Si vous avez vraiment vraiment, utiliser
File
pour spécifier un chemin d'accès absolu. Mais il semble que vous utilisez la mauvaise approche pour commencer.Tout d'abord (je pense) MODE_PRIVATE serait de travailler parce que je suis en utilisant le même sharedUserId. Deuxièmement, j'avais l'intention d'écrire de données partagée à la fois aux applications. Il est important que l'inconnu applications n'ont pas accès aux données partagées.
Essayez de créer un contexte pour l'autre app à l'aide de
Context.createPackageContent()
, puis utilisezopenFileOutput
avec uniquement le nom de fichier. N'ai pas essayé, mais puisque vous avez un sharedUserId, qui peut juste travailler. Je ne serais pas surpris si cela ne fonctionne pas bien.Si vous déplacez les infos utiles de commentaires pour la réponse, je vais vous donner un upvote.
OriginalL'auteur EboMike
Ouvrir un
FileOutputStream
de fichier, par rapport à ce chemin:En fait j'ai fini par utiliser
createPackageContent
OriginalL'auteur ognian
Depuis ce mois je suppose que vous avez déjà résolu votre problème, mais je vais contribuer de toute façon.
Le partage de données entre les applications est ce que ContentProviders sont pour. En supposant que vous savez comment écrire un ContentProvider et d'accès, vous pouvez accéder à des fichiers via ParcelFileDescriptor, qui inclut des constantes pour le mode dans lequel vous créez les fichiers.
Ce dont vous avez besoin maintenant est de limiter l'accès de sorte que pas tout le monde peut lire les fichiers via le fournisseur de contenu, et vous le faire via android autorisations. Dans le manifeste de l'une de vos applications, celle qui va héberger les fichiers et le fournisseur de contenu, écrire quelque chose comme ceci:
et dans les deux apps ajouter ceci:
en utilisant protectionLevel="signature", seules les applications signé par vous pouvez accéder à votre fournisseur de contenu, et donc de vos fichiers.
OriginalL'auteur palako
Vous ne devriez pas être écrasant d'autres applications fichiers. Cela dit, vous avez deux solutions
Edit: Développeur possède à la fois des applications
Merci pour Romain Kurik pour le rappeler. Un lien vers son post sur DONC
À partir de l'android docs
Donc, c'est exactement la façon dont les id d'utilisateur sous linux, essentiellement, vous êtes le propriétaire de les deux et ont accès en lecture/écriture à la fois.
Il est possible d'obtenir un accès root sur la plupart des téléphones, c'est comment rom personnalisé peut être installé. À partir de là, les applications peuvent demander root via le 'super Utilisateur' application. Mais puisque vous contrôlez à la fois il devrait y avoir une solution plus simple, je vais revenir à vous dans un peu.
Regarder le modifier dans mon post ci-dessus.
OriginalL'auteur smith324