0

J'ai plus de 5 applications sur le téléphone dont ils ont besoin pour partager des données avec le fournisseur de contenu, et chaque application installée en premier doit créer une table et une URI, donc dans toutes les applications pour donner l'autorité d'application pour initialiser le fournisseur. Mais j'ai une erreur d'installation: INSTALL_FAILED_CONFLICTING_PROVIDER erreur, comment puis-je gérer ce problème?erreur de fournisseur de contenu android INSTALL_FAILED_CONFLICTING_PROVIDER

Répondre

2

I have more than 5 applications on the phone that they need to share data with content provider

Très probablement, ce n'est pas une bonne idée.

so in all applications I should declare provider in manifest, to give the application authority to initialize provider

Cela ne fonctionnera pas.

But I got Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER error

C'est pourquoi cela ne fonctionnera pas.

how can I manage this problem ?

Si l'on suppose pour le moment que ce fut une bonne idée, vous pouvez expédier l'application avec le <provider> marqué comme android:enabled="false". Ensuite, la première application pourrait essayer d'accéder au ContentProvider, et quand il détermine que personne d'autre n'a configuré le ContentProvider, il peut activer le sien (voir PackageManager et setComponentEnabledSetting()). Supposons donc que vos cinq applications s'appellent A, B, C, D et E. A est installé en premier. L'utilisateur l'exécute, A voit qu'il n'y a pas ContentProvider, et permet le sien. L'utilisateur procède à l'installation de B, C, D et E, et tous utilisent le ContentProvider de A pour stocker leurs données. L'utilisateur désinstalle maintenant A. B, C, D et E vont perdre toutes leurs données, que leurs données disparaissent lorsque A est désinstallé. L'utilisateur, selon toute vraisemblance, n'appréciera pas cela.

Le seul scénario dans lequel c'est une bonne idée est si B, C, D et E sont supposés dépendre entièrement de A. Dans ce cas, B, C, D et E n'ont pas besoin de leur propre ContentProvider , car ils peuvent toujours utiliser A, et si A n'existe pas, c'est la faute de l'utilisateur.

+0

merci pour votre réponse! Malheureusement, je ne peux pas gérer l'ordre d'installation des applications. N'importe laquelle de ces applications pourrait être installée en premier. Comment implémenter le stockage de données partagées pour ce cas? – alexanoid

+0

@alexanoid: "Comment implémenter le stockage de données partagées pour ce cas?" - Je ne connais pas de bonne stratégie pour ça. C'est un problème compliqué, car l'utilisateur peut désinstaller n'importe quelle application dans n'importe quel ordre. Ma réaction intempestive est de * ne * pas * essayer de partager des données en continu, mais plutôt donner à l'utilisateur la possibilité de copier explicitement des données d'une application à l'autre. Vous pouvez essayer de conserver les données dans un emplacement commun sur le stockage externe, une qui n'est pas supprimée lorsque les applications sont désinstallées, mais vous ne pouvez pas nettoyer lorsque la dernière application est désinstallée. – CommonsWare

+0

Merci encore! dans le cas du fichier texte simple, puis-je utiliser une approche simple .. par exemple Fichier f = new Fichier (getContext(). getFilesDir(), "someveryvery uniquename.txt"); afin de partager des informations (lecture/écriture) entre toutes les applications? Est-ce une bonne idée d'utiliser la méthode getFilesDir() à cette fin? – alexanoid

0

Vous devez définir fournisseur dans le manifeste de toutes les applications comme ceci:

android:authorities="com.app.SomeContentProvider${applicationId}" 

Il est important que votre fournisseur est unique pour chaque application.

Questions connexes