2009-08-17 15 views
3

Wie kann ich mich für SMS-Datenbankänderungen registrieren?Wie registriere ich mich für SMS-Datenbankänderungen?

Ich habe versucht:

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

wo mydataSetObserver wie dies umgesetzt wird:

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

Aber wenn ich eine SMS-Nachricht im Emulator zu senden versucht, MyDataSetObserver nie aufgerufen.

Können Sie mir bitte sagen, warum?

Vielen Dank.

Antwort

3

Es klingt wie alles, was Sie tun möchten, ist die Möglichkeit, Änderungen an der SMS-Datenbank auf dem Gerät vorzunehmen.

Die Art, wie ich es in der Vergangenheit getan habe, ist durch die Verwendung von Tags in der AndroidManifest.xml. Die Anwendung, die ich benötigte, um die READ_SMS-Berechtigung sowie die READ_CONTACTS-Berechtigung zu verwenden, würde jedoch auf die gleiche Weise die Berechtigung zum Schreiben in die Datenbank erhalten.

I definiert diese gewünschten Berechtigungen in der AndroidManifest.xml mit der folgenden Tag-Datei:

im list of permissions inklusive Sie WRITE_SMS verwenden können, ist, was die gewünschte Fähigkeit geben Sie sollten.

Bitte beachten Sie: Da ich ein neuer Benutzer bin, würde StackOverflow nur einen Hyperlink für diesen Beitrag veröffentlichen, ich habe versucht, viel mehr Informationen, aber war nicht dazu in der Lage. Bitte gehen Sie auf die Android-Entwickler-Website und suchen Sie nach der Datei AndroidManifest.xml und sehen Sie gegebenenfalls weitere Informationen.

1

DataSetObserver s nur beobachten DataSetObservable s sind sie registriert mit. Ihre MyDataSetObserver ist mit Ihrer mCursor registriert und wird benachrichtigt, wenn mCursor ändert (z. B. nach requery), aber nicht, wenn der Inhalt von einem anderen Prozess (wie der Messaging-Anwendung) geschrieben wird.

Leider gibt es derzeit keine gute Möglichkeit, für das Ereignis der gesendeten Textnachrichten zu hören, die beste Alternative scheint zu sein content://sms/sent, möglicherweise mit einem ContentObserver.

This Frage ist verwandt.

+0

Wie kann ich benachrichtigt werden, wenn eine SMS gelesen wird? Und was meinst du mit 'polling content: // sms/sent'? – n179911

+0

Per Polling meine ich das häufige Lesen und Überprüfen des SMS-Inhaltsanbieters (z. B. mit einem Timer) –

Verwandte Themen