2015-11-05 16 views
13

Tôi hiện đang truy vấn cơ sở dữ liệu Android sms/mms để truy xuất tất cả các tin nhắn đã nhận và gửi đi MMS. Tất cả mọi thứ hoạt động tốt, nhưng tôi nhận thấy rằng cột m_size chỉ có một giá trị cho MMS tin nhắn đã được gửi (không nhận được).Truy vấn MMS chỉ trả về kích cỡ tin nhắn của các tệp đính kèm đã gửi

Dưới đây là các truy vấn:

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

sử dụng này, tôi có thể lấy tổng số byte của thông điệp, nhưng nó đang trở null cho tin nhắn MMS đã được nhận.

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

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

Mà không cần phải tính toán kích thước "data" cột của thông điệp, là có bất cứ điều gì sai trái với truy vấn của tôi/bất cứ lý do tại sao m_size sẽ trở lại null cho MMS thông điệp đã được nhận (và có một tập tin đính kèm hình ảnh hợp lệ)?

Lưu ý: Không chắc chắn nếu bất cứ điều gì đã thay đổi trong API trước đó, vì API này không được ghi lại. Tôi hiện đang thử nghiệm/phát triển trên Nexus 5X bằng API 23.

+0

Chỉ cần thông tin, tôi đang chạy KitKat (API 19) trên Galaxy S4 và các giá trị 'm_size' hiện diện cho cả tin nhắn đã gửi và đã nhận. –

+0

@MikeM. thú vị, cảm ơn cho đầu vào của bạn. điều này có thể chắc chắn là điều này có thể đã thay đổi cho API 23 rồi. –

Trả lời

2

Từ những gì tôi có thể thấy không có gì sai với truy vấn của bạn.

Có một vài lý do khiến m_size có thể rỗng. null là giá trị mặc định của cột đó khi bảng được tạo, xem MmsSmsDatabaseHelper. Ứng dụng SMS mặc định có thể gọi PduPersister.persist khi lưu PDU và kích thước tin nhắn được chèn here. Thực tế là bạn đã tiếp tục truy xuất PDU nhưng không có m_size cho biết tiêu đề không chứa giá trị này. Nếu bạn có một thiết bị bắt nguồn từ, bạn có thể xác minh nội dung tiêu đề bằng tcpdump và Wireshark. Tôi giả định rằng ứng dụng SMS mặc định vẫn duy trì PDU và các phần chính xác, nhưng một điều bạn có thể kiểm tra là loại tin nhắn của MMS trong hộp thư đến. Khi truy xuất MMS, trước tiên bạn sẽ nhận được NOTIFICATION-IND thông báo rằng có MMS để tải xuống và nó chứa một số thông tin cơ bản. Điều này sẽ được ứng dụng mặc định duy trì. Sau đó, nó sẽ tải xuống toàn bộ MMS và duy trì một số RETRIEVE-CONF. Kích thước thư là một phần của số NotificationInd. Khi ứng dụng SMS vẫn tồn tại RETRIEVE-CONF, nó có thể ghi đè/xóa NOTIFICATION-IND và m_size sẽ bị mất. Để kiểm tra điều này, bạn có thể vô hiệu hóa tải xuống MMS tự động (nếu ứng dụng hỗ trợ nó) hoặc chỉ vô hiệu hóa bất kỳ dữ liệu nào vì thông báo sẽ được gửi dưới dạng tin nhắn Đẩy WAP.

Các vấn đề liên quan