J'ai seulement une application. Il a un fournisseur de contenu qui n'est pas exporté (je ne veux pas que d'autres applications aient accès au contenu) J'utilisais avec succès le fournisseur de contenu jusqu'à présent.
J'ai créé un observateur de contenu pour mettre à jour un TextView. La méthode onChange
est appelée lorsque le contenu change et essaie de reconsulter ce contenu. C'est à ce moment-là qu'il obtient l'exception de sécurité qui ressemble à ceci:
java.lang.SecurityException: Refus de permission : la lecture de l'URI du fournisseur de contenu org.sil.lcroffline.data.DataProvider content://org.sil.lcroffline/users/by_account_name/5555544444 depuis pid=0, uid=1000 nécessite que le fournisseur soit exporté, ou accorderUriPermission()
Voici le code qui la génère:
@Override
public void onChange(boolean selfChange, Uri uri) {
Cursor c = null;
try {
c = mContentResolver.query(UserEntry.buildUserPhoneUri(mAccount.name), null, null, null, null);
// faire des choses avec les données dans le curseur
} finally {
if (c != null) c.close();
}
}
L'URI semble être formé correctement, et je ne pense pas qu'il y ait un problème pour le faire correspondre dans le fournisseur de contenu.
Le code ci-dessus fonctionne bien lorsqu'il est appelé de manière programmatique à partir de l'application, c'est seulement lorsqu'il est déclenché par un changement dans les données observées que l'Exception se produit.
Comment pourrais-je obtenir un refus de permission de l'intérieur de la même application, et comment puis-je résoudre cela?
Voici le manifeste: