2015-11-05 11 views
13

Ich frage derzeit die Android sms/mms Datenbank abzurufen alle MMS Nachrichten empfangen und gesendet. Alles funktioniert gut, aber mir ist aufgefallen, dass die Spalte m_size nur einen Wert für MMS Nachrichten hat, die gesendet (nicht empfangen) wurden.MMS-Abfrage gibt nur die Nachrichtengröße der gesendeten Anhänge zurück

Hier ist die Abfrage:

final String[] projection = new String[]{ "*" }; 
Uri uri = Uri.parse("content://mms"); 
Cursor query = _activity.getContentResolver().query(uri, projection, null, null, null); 

dies mit, ich bin in der Lage, die Gesamtanzahl der Bytes der Nachricht abzurufen, aber es derzeit null für MMS-Nachrichten zurückgibt, die empfangen wurden.

if (query.moveToFirst()) 
{ 
    do 
    { 
     // ... 

     Integer size = query.getInt(query.getColumnIndex("m_size")); 
    } 
    while (query.moveToNext()); 
} 

Ohne die "data" Spaltengröße der Nachricht zu berechnen, ist es etwas falsch mit meiner Anfrage/ein Grund, warum m_size kehrt null für MMS Nachrichten, die (und über einen gültigen Bildanhang) empfangen wurden?

Hinweis: Nicht sicher, ob sich in früheren APIs etwas geändert hat, da diese API nicht dokumentiert ist. Ich teste/entwickle derzeit ein Nexus 5X mit API 23.

+0

Nur FYI, Ich bin KitKat (API 19) auf einem Galaxy S4 laufen, und 'm_size' Werte sind für die gesendeten und empfangenen Nachrichten vorhanden. –

+0

@MikeM. interessant, danke für deine Eingabe. Das könnte durchaus möglich sein, dass sich dies für API 23 dann irgendwie ändern könnte. –

Antwort

2

Von dem, was ich sehen kann, ist nichts falsch mit Ihrer Abfrage.

Es gibt einige Gründe, warum m_size null sein könnte. null ist der Standardwert dieser Spalte, wenn die Tabelle erstellt wird, siehe MmsSmsDatabaseHelper. Die Standard-SMS-App ruft beim Speichern der PDUs wahrscheinlich PduPersister.persist auf, und die Nachrichtengröße wird eingefügt here. Die Tatsache, dass Sie abgerufene PDUs beibehalten haben, aber keine m_size, gibt an, dass der Header diesen Wert nicht enthält. Wenn Sie ein gerootetes Gerät haben, können Sie den Inhalt des Headers mit tcpdump und Wireshark überprüfen. Ich nehme an, dass die Standard-SMS-App die PDU und Teile korrekt beibehalten hat, aber eine Sache, die Sie überprüfen können, ist der Nachrichtentyp der MMS im Posteingang. Beim Abrufen von MMS erhalten Sie zunächst eine NOTIFICATION-IND, die benachrichtigt, dass eine MMS zum Herunterladen vorhanden ist, und einige grundlegende Informationen enthält. Dies sollte von der Standard-App beibehalten werden. Es sollte dann die vollständige MMS herunterladen und eine RETRIEVE-CONF beibehalten. Die Nachrichtengröße ist Teil der NotificationInd. Wenn die SMS-App die RETRIEVE-CONF-Datei weiterhin speichert, kann sie den NOTIFICATION-IND überschreiben/löschen, und m_size wäre verloren. Um dies zu testen, können Sie den automatischen MMS-Download deaktivieren (falls die App dies unterstützt) oder einfach alle Daten deaktivieren, da die Benachrichtigung als WAP-Push-Nachricht übermittelt wird.

Verwandte Themen