2010-09-24 40 views
7

trong ứng dụng của mình, tôi nên thực hiện một số hành động khi cuộc gọi đến nhưng không được người dùng trả lời.Cách truy xuất các cuộc gọi nhỡ trên Android SDK 2.2

Tôi đã tìm kiếm trong số android.telephonyNotificationManager, nhưng tôi chưa tìm thấy phương pháp để giải quyết vấn đề này.

Có ai đó có ý tưởng về cách tìm hiểu xem có cuộc gọi nhỡ trên điện thoại hay không?

Trả lời

14

Đây là mã có thể truy vấn nhật ký cuộc gọi cho một cuộc gọi nhỡ. Về cơ bản, bạn sẽ phải kích hoạt bằng cách nào đó và đảm bảo rằng bạn cung cấp nhật ký cuộc gọi một thời gian (một vài giây nên làm) để viết thông tin nếu không bạn kiểm tra nhật ký cuộc gọi quá sớm, bạn sẽ không tìm thấy cuộc gọi gần đây nhất.

final String[] projection = null; 
final String selection = null; 
final String[] selectionArgs = null; 
final String sortOrder = android.provider.CallLog.Calls.DATE + " DESC"; 
Cursor cursor = null; 
try{ 
    cursor = context.getContentResolver().query(
      Uri.parse("content://call_log/calls"), 
      projection, 
      selection, 
      selectionArgs, 
      sortOrder); 
    while (cursor.moveToNext()) { 
     String callLogID = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls._ID)); 
     String callNumber = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.NUMBER)); 
     String callDate = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.DATE)); 
     String callType = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.TYPE)); 
     String isCallNew = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.NEW)); 
     if(Integer.parseInt(callType) == MISSED_CALL_TYPE && Integer.parseInt(isCallNew) > 0){ 
      if (_debug) Log.v("Missed Call Found: " + callNumber); 
     } 
    } 
}catch(Exception ex){ 
    if (_debug) Log.e("ERROR: " + ex.toString()); 
}finally{ 
    cursor.close(); 
} 

Tôi hy vọng bạn thấy điều này hữu ích.

+0

MISSED_CALL_TYPE được khai báo như thế nào? – erdomester

+3

MISSED_CALL_TYPE = android.provider.CallLog.Calls.MISSED_TYPE; - Xin lỗi vì đã bỏ phần đó ra. –

+0

Cảm ơn! Tôi không thể sử dụng nó sau đó vì vậy tôi phát hiện ra rằng có 2 cách cho các loại cuộc gọi: 1. khai báo nó như là một số nguyên: int typeColumn = c.getColumnIndex (android.provider.CallLog.Calls.TYPE) ;, sau đó int callType = c.getInt (typeColumn); và sau tất cả, ví dụ: nếu calltype == 1 thì .....2: sử dụng int outgoingtypeColumn = c.getColumnIndex (android.provider.CallLog.Calls.TYPE + "= '2'"); vv Hy vọng điều này sẽ giúp người khác! – erdomester

0

Từ những gì tôi hiểu, bạn cần phải truy vấn các nhà cung cấp CallLog (hoặc có thể CallLog.Calls), và trang này giải thích làm thế nào để truy vấn cung cấp nội dung: http://developer.android.com/guide/topics/providers/content-providers.html#basics

Tôi muốn được hạnh phúc để xem mã nếu bạn có thể thực hiện công việc này!

+0

Có. Nhưng trong trường hợp đó, tôi sẽ không thể biết liệu cuộc gọi nhỡ có được trả lời hay không. Trong ứng dụng của tôi, nếu điện thoại bị nhỡ đã được trả lời, tôi không nên thông báo cho người dùng về cuộc gọi điện thoại bị nhỡ một lần nữa. – Mathieu

+1

Cuộc gọi nhỡ có thể được trả lời như thế nào? Có một hằng số MISSING_TYPE trong lớp CallLog.Calls, tôi tin rằng một cuộc gọi là MISSING_TYPE, INCOMING_TYPE hoặc OUTGOING_TYPE –

+0

Có. Tôi xin lỗi vì tôi không thể hiện những gì tôi muốn rõ ràng. Tôi đồng ý với bạn rằng "cuộc gọi nhỡ" không thể được trả lời khi điện thoại "đổ chuông". Nhưng chúng ta có thể gọi lại khi chúng ta biết có một cuộc gọi nhỡ sau đó, và đây là ý tôi là "trả lời" trong câu hỏi của tôi. Vì vậy, theo cách này, tôi nghĩ tốt hơn là nên sử dụng thông báo ngoài việc đọc thông tin trong calllog. Tôi hy vọng tôi rõ ràng hơn thời gian này. – Mathieu

0

Tôi cho rằng bạn có nhà cung cấp nội dung để truy cập nhật ký cuộc gọi.

http://www.anddev.org/video-tut_-_querying_and_displaying_the_calllog-t169.html

http://www.devx.com/wireless/Article/41133

Nếu mã này hoạt động, bạn chỉ cần chạy truy vấn này vào đúng thời điểm. Ý tôi là kiểm tra một số mẫu có thể thông báo cho bạn khi bạn nhận được một cuộc gọi trong điện thoại của bạn

http://groups.google.com/group/android-developers/browse_thread/thread/d97a759a3708cbe3

Khi bạn nhận được thông báo này đặt một bộ đếm thời gian hoặc sử dụng một số được xây dựng trong Intents để thấy rằng điện thoại đã trở lại trạng thái bình thường và truy cập các bản ghi cuộc gọi ...

có thể lặp lại

broadcast receiver for missed call in android

Show Toast on Missed Call in android application

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