2009-08-17 10 views
3

Comment s'inscrire aux modifications de la base de données SMS?Comment s'inscrire aux modifications de la base de données SMS?

J'ai essayé:

mCursor = mActivity.getContentResolver().query(Sms.CONTENT_URI, new String[] { 
      Sms.ADDRESS 
    }, null, null, null); 
mCursor.registerDataSetObserver(mydataSetObserver); 

où mydataSetObserver est mis en œuvre comme ceci:

private class MyDataSetObserver extends DataSetObserver { 
     public void onChanged() { 
      System.out.println ("1"); 
     } 
     public void onInvalidated() { 
      System.out.println ("2"); 
     } 
} 

Mais quand j'essayé d'envoyer un message SMS dans l'émulateur, MyDataSetObserver ne est jamais appelée.

Pouvez-vous me dire pourquoi?

Merci.

Répondre

3

Il semble que tout ce que vous essayez de faire est d'avoir la possibilité d'apporter des modifications à la base de données SMS sur le périphérique.

La façon dont je l'ai fait dans le passé est en utilisant des balises dans le AndroidManifest.xml. L'application que j'ai faite nécessaire pour utiliser l'autorisation READ_SMS ainsi que l'autorisation READ_CONTACTS, cependant obtenir l'autorisation d'écrire dans la base de données serait faite de la même manière.

J'ai défini ces autorisations souhaitées dans le fichier AndroidManifest.xml avec la balise suivante:

Inclus dans le list of permissions vous pouvez utiliser est WRITE_SMS, qui devrait vous donner la capacité souhaitée.

S'il vous plaît noter: parce que je suis un nouvel utilisateur, StackOverflow me laisserait seulement poster un lien hypertexte pour ce poste, j'ai essayé d'inclure beaucoup plus d'informations mais je n'ai pas pu le faire. S'il vous plaît aller sur le site Web de développeur android et recherchez le fichier AndroidManifest.xml et voir plus d'informations si nécessaire.

1

DataSetObserver s seulement observer DataSetObservable s ils sont enregistrés avec. Votre MyDataSetObserver est enregistré avec votre mCursor et sera notifié chaque fois que mCursor changements (par exemple après requery) mais pas lorsque le contenu est écrit par un autre processus (comme l'application de messagerie).

Malheureusement, il n'y a actuellement pas de bonne façon d'écouter l'événement des messages texte envoyés, la meilleure alternative semble être d'interroger content://sms/sent, en utilisant potentiellement un ContentObserver.

This La question est liée.

+0

Comment puis-je être informé lorsqu'un SMS est lu? Et que voulez-vous dire par «polling content: // sms/send»? – n179911

+0

En interrogeant je veux dire la lecture fréquente et la vérification du fournisseur de contenu sms (par exemple avec une minuterie) –

Questions connexes