Content Provider und SMS

  • Antworten:3
Maik S.
  • Forum-Beiträge: 38

21.02.2011, 21:04:50 via Website

Weil ich mir selbst lange diese Frage gestellt habe, wie ihr im Entwicklerforum nachlesen könnt, habe ich begonnen mich mit dem Content Provider auseinander zusetzen, speziell zum Thema SMS-Inbox und gesendete SMS:

Ich habe einmal alle Spalten gesammelt die man über die beiden Contentprovider auslesen kann:

1Uri inboxSmsUri = Uri.parse("content://sms/inbox");
2 Uri sentSmsUri = Uri.parse("content://sms/sent");
3
4 Cursor inboxCursor = context.getContentResolver().query(inboxSmsUri, null, null, null, null);
5 Cursor sentCursor = context.getContentResolver().query(sentSmsUri, null, null, null, null);
6
7 System.out.println("Received SMS:");
8
9 for(int i = 0; i < inboxCursor.getColumnCount(); i++) {
10 System.out.println(i + " --> " + inboxCursor.getColumnName(i));
11 }
12
13 System.out.println("Sent SMS:");
14
15 for(int i = 0; i < sentCursor.getColumnCount(); i++) {
16 System.out.println(i + " --> " + sentCursor.getColumnName(i));
17 }

Received SMS:
10 --> _id
2 1 --> thread_id
3 2 --> address
4 3 --> person
5 4 --> date
6 5 --> protocol
7 6 --> read
8 7 --> status
9 8 --> type
109 --> reply_path_present
1110 --> subject
1211 --> body
1312 --> service_center
1413 --> locked
1514 --> error_code
1615 --> seen
Bei Sent SMS dasselbe wie oben

Allerdings weiß ich noch nicht wie ich mit den SMS-Bodys verfahren soll, es gibt ja so etwas wie PDUs oder so ähnlich... mal schauen

Ich habe ein sehr gutes eBook gefunden:
http://www.etracker.de/lnkcnt.php?et=C8KyME&url=http://dpunkt.de/ebooks_pdf/free/3436.pdf

und dazu noch ein Tutorial zum Cursor:
http://www.brighthub.com/mobile/google-android/articles/29340.aspx

Damit kann sich nun jeder selbst, wie ich auch, seine Sachen zusammensuchen...

Viel Erfolg und Grüße,
Maik

P.S.: Zum Thema "Wie kriege ich jetzt die Daten"

Hier ein Beispiel:
1int id = sentCursor.getInt(0);

Vielleicht findet sich ja mal die Zeit um ein Tutorial darüber zu machen =)

Antworten
Peter
  • Forum-Beiträge: 7

05.03.2012, 11:58:37 via App

Hallo Maik, bekomme zum Link die Meldung: eBook existiert nicht.

Hast du vllt einen andeten Link zum besagten eBook?

Beste Gruesse

Antworten
efkay
  • Forum-Beiträge: 9

03.04.2012, 10:13:54 via Website

Vermutlich ist dieses eBook gemeint:

http://dpunkt.de/ebooks_files/free/3436.pdf

Ist zwar schon ein bisschen aelter, dafuer auf Deutsch und kostenlos :)

Antworten
Franz Deschler
  • Forum-Beiträge: 21

30.05.2012, 21:38:38 via Website

Hiermal ein kleiner Überblick für alle die auf den SMS-Speicher zugreifen wollen (also gesendete und empfangene SMS - kein SMS-Listening) und sich gerade erst mit dem Thema beschäftigen:

Über eine URI wird auf die Daten verwiesen, die man bearbeiten will:
1Uri inboxSmsUri = Uri.parse("content://sms/inbox");
Neben /inbox gibt´s auch /outbox, /draft und weitere.

Um die Daten abrufen und bearbeiten zu können gibt es Content Provider. Sie sind die Schnittstelle zur Datenbank auf die letztendlich zugegriffen wird. Dazu muss wie in SQL eine Datenbank-Abfrage gemacht werden:
1Cursor inboxCursor = getContentResolver().query(inboxSmsUri, null, null, null, null);
(dort wo in diesem Beispiel "null" steht, können Abfrage-Bedingungen eingefügt werden um bestimmte Spalten oder Datensätze zu erhalten)

!-- Achtung --!
Der Content Provider der hier verwendet wird ist nicht teil der offiziellen API. Google rät davon ab auf diese Weise auf SMS zuzugreifen. Denn es kann sein, dass er in manchen Handys anders implementiert ist und dieser Code nicht funktioniert. Allerdings ist das die einzige mir bekannte Möglichkeit.
---

Als Ergebnis erhält man einen Cursor, mit dem man über die Tabelle (das Ergebnis der Datenbank-Abfrage) iterieren, und die Werte auslesen kann.
Welche Spalten die Tabelle enthält seht ihr oben in Maiks Beitrag.

Ich hab mal ein bisschen rumexperimentiert und konnte so die Bedeutung und Werte der meisten Spalten ausfindig machen.


















_iddie ID der SMS
thread_iddamit ist die ID des Gesprächs gemeint - bin mir aber nicht 100%ig sicher
addressNr. des Empfängers / Absenders
persondie ID des zur Nr. gespeicherten Kontakts
dateZeitstempel
protocolProtokoll mit dem die SMS übertragen wurde. Über die Werte kann ich aber nichts sagen.
readgibt an, ob die SMS gelesen wurde.
1 = gelesen
0 = ungelesen
status TP-Status der SMS. Dazu kann ich aber nichts sagen.
typeder Typ der SMS
1 = empfangen
2 = gesendet
3 = Entwurf
reply_path_presentgibt an, ob das reply-path-bit gesetzt wurde.
subjectBetreff der Nachricht
bodydie Nachricht
service_center?
lockedgibt an, ob die Nachricht gesperrt ist.
1 = gesperrt
0 = nicht gesperrt
error_codewie der Name schon sagt: der Error-Code. Welche es gibt trage ich nach wenn ich mehr darüber weiß.
seengibt an ob die SMS "gesehen" wurde (seen != read) - für Statusnachrichten

— geändert am 31.05.2012, 18:08:33

Antworten