2010-09-08 35 views

Trả lời

10

Không có chương trình phát sóng cụ thể cho cuộc gọi nhỡ, AFAIK.

Bạn có thể xem chương trình phát sóng ACTION_PHONE_STATE_CHANGED, đợi cho đến khi điện thoại chuyển từ EXTRA_STATE_RINGING sang EXTRA_STATE_IDLE, sau đó thử kiểm tra nhà cung cấp nội dung CallLog để xem cuộc gọi có bị nhỡ hay không. Tôi đã không thử kỹ thuật này, nhưng nó có thể hoạt động.

+0

@ CommonsWare-thể chúng ta phân biệt giữa cuộc gọi nhỡ và từ chối cuộc gọi vì cả hai chức năng trong cách đề cập ở trên !!! –

11

Bạn cần phải sử dụng một ContentObserver

public class MissedCallsContentObserver extends ContentObserver 
{ 
    public MissedCallsContentObserver() 
    { 
     super(null); 
    } 

    @Override 
    public void onChange(boolean selfChange) 
    { 
     Cursor cursor = getContentResolver().query(
      Calls.CONTENT_URI, 
      null, 
      Calls.TYPE + " = ? AND " + Calls.NEW + " = ?", 
      new String[] { Integer.toString(Calls.MISSED_TYPE), "1" }, 
      Calls.DATE + " DESC "); 

     //this is the number of missed calls 
     //for your case you may need to track this number 
     //so that you can figure out when it changes 
     cursor.getCount(); 

     cursor.close(); 
    } 
} 

Từ ứng dụng, bạn chỉ cần làm điều này:

MissedCallsContentObserver mcco = new MissedCallsContentObserver(); 
getApplicationContext().getContentResolver().registerContentObserver(Calls.CONTENT_URI, true, mcco); 
+0

Xin chào, tôi muốn biết nếu bạn cố tình bỏ qua 'cursor.close()'? Giống như nó không cần thiết vì 'ContentObserver' sẽ tự động đóng nó? – lock

+0

câu hỏi hay. Tôi đã không bỏ nó ra một cách có chủ đích, nó nên ở đó. Tôi sẽ cập nhật câu trả lời của mình. – Joe

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