2009-12-03 4 views
3

J'ai une exigence dans laquelle j'ai besoin d'une liste de tous les contacts édités/modifiés.Comment définir le déclencheur sur la base de données de contacts dans Android

Selon le Android documentation,

_SYNC_DIRTY 

sera mis à chaque fois qu'un contact est édité. Mais, il semble y avoir un bug dans ceci, ce qui le rend toujours à 1 (n'importe quoi), même si nous le mettons explicitement à 0.

Donc, je me demandais si je pouvais créer un SQLite TRIGGER la base de données de contacts. De telle sorte que, chaque fois qu'un contact est édité, l'identifiant de contact édité est peuplé dans une table différente que je peux lire plus tard de mon application.

J'ai essayé ...

CREATE TRIGGER IF NOT EXISTS updated_contacts UPDATE ON 'contacts.db'.phones 
      BEGIN 
      INSERT INTO updated_table SET updated_id=old.person; 
      END; 

Mais quelques problèmes ici ...

1) 'téléphones' est une table dans la base de données de contacts. mais, je ne suis pas sûr du nom de la base de données de contacts (ici je l'ai supposé être «contacts.db»).

2) updated_table est une table sur une base de données différente 'mydatabase.db' que j'ai créée à partir de mon application. et, je ne suis pas sûr si je peux placer TRIGGERS à travers différentes bases de données.

Tout cela dans Android 1.6

Aussi, je ne suis pas sûr de l'autorisation d'accéder à la base de données de contacts natif sur Android.

Existe-t-il un autre moyen d'y parvenir?

Toute information à ce sujet serait d'une grande aide.

Merci.

Répondre

4

Alors, je me demandais si je peux créer un SQLite TRIGGER sur la base de données contacts .

Vous n'avez pas accès à la base de données SQLite sous-jacente.

Vous pouvez essayer d'utiliser registerContentObserver() pour être averti que les contacts sont modifiés.

+1

Merci une tonne pour le respose. J'ai examiné un document concernant cette API. C'est définitivement un moyen de réaliser ce que je veux. Mais, si j'utilise cette API pour surveiller les changements effectués sur la base de données de contacts, je devrai garder mon application toujours en arrière-plan, un peu trop cher je suppose ... Donc, j'ai pensé à une solution de contournement. Je vais stocker le hachage des contacts. Et, chaque fois que je lance mon application, il va comparer le hachage des contacts existants sur l'appareil avec le hachage stocké plus tôt. Cela me donnera la liste de tous les contacts édités entre les lancements suivants. D'autres façons? – Sunieal

+0

Cela deviendra plutôt cher pour de nombreux contacts. – CommonsWare

Questions connexes