How to retrieve missed calls on Android SDK 2.2

2019-01-22 10:20发布

问题:

in my app I should do some action when a call comes but not answered by the user.

I have searched in the android.telephony and the NotificationManager, but I haven't found a method to solve this problem.

Does someone have an idea of how to get to know if there is a missed call on the phone or not ?

回答1:

Here is code that can query the call log for a missed call. Basically, you will have to trigger this somehow and make sure that you give the call log some time ( a few seconds should do it) to write the information otherwise if you check the call log too soon you will not find the most recent call.

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();
}

I hope you find this useful.



回答2:

From what I understand, you need to query the CallLog provider (or maybe CallLog.Calls), and this page explains how to query content provider: http://developer.android.com/guide/topics/providers/content-providers.html#basics

I'd be happy to see the code if you can make this work !



回答3:

I suppose you have content providers to access call logs.

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

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

If this code works you just need to run this query at the right time. I mean check some samples that can notify you when you get a call in your device

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

Once you get this notification put a timer or use some built in Intents to find that the phone is back to normal state and access the call logs...

Possible duplicate

broadcast receiver for missed call in android

Show Toast on Missed Call in android application