2012-06-06 21 views
5

Tôi muốn phát triển một ứng dụng theo dõi SMS đã gửi/nhận. Ý tôi là, khi người dùng gửi một tin nhắn từ thiết bị của nó, chi tiết tin nhắn sẽ được lưu vào một bảng do tôi cung cấp. Tương tự như vậy, khi thiết bị nhận được bất kỳ tin nhắn SMS, thì đó cũng nên được lưu vào một bảng được cung cấp bởi tôi.Cách theo dõi tin nhắn trong Android?

Lưu ý rằng người dùng sử dụng ứng dụng nhắn tin mặc định của Android để gửi tin nhắn. Tôi có nghĩa là tôi không tích hợp ứng dụng của tôi với ứng dụng tin nhắn mặc định. Tôi chỉ cần theo dõi tất cả các tin nhắn được gửi từ ứng dụng đó khi Android theo dõi tất cả các tin nhắn đã gửi trong Thư đã gửi thư mục Ứng dụng tin nhắn.

Tôi làm như thế nào? Làm ơn giúp tôi. Tôi không cần câu trả lời, nhưng tôi cần một số đầu mối để làm điều đó.

Vui lòng không đề xuất đọc thư từ Hộp thư đến và Hộp thư đi, v.v. Vì tôi muốn lưu thư khi người dùng gửi/nhận thư. Không phải sau khi gửi hoặc nhận nó.

+2

Bạn đã thử gì và vấn đề bạn đang gặp phải là gì? Chỉ cần giữ nó đơn giản. –

+0

@AndroSelva Tôi không có bất kỳ đầu mối nào để làm điều đó. Tôi không muốn câu trả lời, nhưng tôi muốn một số đầu mối. –

+0

@Mido Tôi không muốn đọc thư từ Inbox và hiển thị nó. Tôi muốn lưu tin nhắn khi người dùng gửi nó. –

Trả lời

9

này rất dễ dàng để làm với một phát sóng Receiver ghi trong Manifest của bạn:

chỉnh sửa: dường như chỉ để làm việc cho SMS_RECEIVED thấy điều này thread

<receiver android:name=".SMSReceiver" android:enabled="true"> 
<intent-filter android:priority="1000"> 
     <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
     <action android:name="android.provider.Telephony.SMS_SENT"/> 
</intent-filter> 
</receiver> 

Và Quyền:

<uses-permission android:name="android.permission.RECEIVE_SMS" /> 

Sau đó, tạo Người nhận sẽ thực hiện:

public class SMSReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ 
    //do something with the received sms   
     }else if(intent.getAction().equals("android.provider.Telephony.SMS_SENT")){ 
      //do something with the sended sms 
    } 
    } 
} 

Để xử lý một sms đến có thể trông giống như:

Bundle extras = intent.getExtras(); 
Object[] pdus = (Object[]) extras.get("pdus"); 
for (Object pdu : pdus) { 
     SmsMessage msg = SmsMessage.createFromPdu((byte[]) pdu); 
     String origin = msg.getOriginatingAddress(); 
     String body = msg.getMessageBody(); 
.... 
} 

Nếu bạn muốn ngăn chặn một sms được đẩy trong hộp thư đến commen, bạn có thể đạt được điều này với:

abortBroadcast(); 
+0

Tôi chỉ muốn xác nhận rằng, khi người dùng cố gắng gửi tin nhắn từ ứng dụng tin nhắn mặc định thì Android sẽ gọi cho lớp Người nhận của tôi? –

+0

xin lỗi, tôi xây dựng một ứng dụng để chắc chắn và tôi chỉ nhận được hành động SMS_RECEIVED, tôi không biết tại sao ... tôi sẽ kiểm tra nó – 2red13

+0

http: // stackoverflow.com/questions/990558/android-broadcast-receiver-for-sent-sms-messages – 2red13

1

Vui lòng không gọi abortBroadcast() bạn sẽ ngăn các ứng dụng khác nhận được SMS_RECEIVED phát sóng theo thứ tự. Đây là hành vi xấu đây không phải là những gì Android là về. Tôi không hiểu tại sao google thậm chí cho phép nhà phát triển hủy bỏ các chương trình phát sóng về các ý định hệ thống như SMS.

+2

Điều này abortBroadcast cho phép chúng tôi để làm cho phần mềm để chặn các cuộc gọi đến hoặc sms. Tôi nghĩ rằng đây là một điều tốt có thể được sử dụng như một điều xấu, giống như nhiều thứ khác. Mọi người có thể sử dụng một cây bút để giết, cho phép dừng lại để xây dựng cây bút. –

+0

Tôi đồng ý. Nó rất hữu ích cho rất nhiều tính năng tốt. Bạn không nên hủy bỏ tất cả các tin nhắn SMS đến, nhưng nhận của tôi có thể quyết định: SMS này là dành cho tôi, vì vậy hủy bỏ phát sóng, nếu không hãy để nó đi qua – 2red13