android - 如何获取最后的 "received"电话号码?

标签 android phone-call

我怎样才能找到最后一个打给我的“号码”?(已接电话)

请不要回答以下鳕鱼 它有一个错误(因为该类扩展了 PhoneStateListener 并且该方法需要 Activity 来扩展:

    public class CallStat extends PhoneStateListener {

String LOG_TAG = "calllog";
private boolean isPhoneCalling = false;

@Override
public void onCallStateChanged(int state, String incomingNumber) {

    if (TelephonyManager.CALL_STATE_RINGING == state) {
        // phone ringing
        Log.i(LOG_TAG, "RINGING, number: " + incomingNumber);
    }

    if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
        // active
        Log.i(LOG_TAG, "OFFHOOK");

        isPhoneCalling = true;
    }

    if (TelephonyManager.CALL_STATE_IDLE == state) {
        // run when class initial and phone call ended, need detect flag
        // from CALL_STATE_OFFHOOK
        Log.i(LOG_TAG, "IDLE number");

        if (isPhoneCalling) {

            Handler handler = new Handler();

            //Put in delay because call log is not updated immediately when state changed
            // The dialler takes a little bit of time to write to it 500ms seems to be enough
            handler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    // get start of cursor
                      Log.i("CallLogDetailsActivity", "Getting Log activity...");
                        String[] projection = new String[]{Calls.NUMBER};
                        Cursor cur = getContentResolver().query(Calls.CONTENT_URI, projection, null, null, Calls.DATE +" desc");
                        cur.moveToFirst();
                        String lastCallnumber = cur.getString(0);
                }
            },500);

            isPhoneCalling = false;
        }

    }
}
}

我知道传出,但传入呢?

最佳答案

我认为前面答案中的代码有点错误。

query 方法中的第一个参数应该是一个 URI。

请参阅以下更正:

        //fields to select.
        String[] strFields = {
                android.provider.CallLog.Calls.NUMBER,
                android.provider.CallLog.Calls.TYPE,
                android.provider.CallLog.Calls.CACHED_NAME,
                android.provider.CallLog.Calls.CACHED_NUMBER_TYPE
        };

        //only incoming.
        String strSelection = android.provider.CallLog.Calls.TYPE + " = " + android.provider.CallLog.Calls.INCOMING_TYPE;       

        //most recent first
        String strOrder = android.provider.CallLog.Calls.DATE + " DESC"; 


        //get a cursor.
        Cursor mCallCursor = getContentResolver().query(
            android.provider.CallLog.Calls.CONTENT_URI, //content provider URI
            strFields, //project (fields to get)
            strSelection, //selection
            null, //selection args
            strOrder //sortorder.
        );

         mCallCursor.moveToFirst();

关于android - 如何获取最后的 "received"电话号码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18291316/

相关文章:

java - Android 以编程方式接听电话

android - 在没有SIM卡的情况下向本地Android手机发送短信?

android - 如何为 Android 中的每个包编写单个提交消息?

android - 在 android 中使用 DTMF 音调

ios - 在 ios 10.2.1 中打电话时不显示确认对话框,但在 10.3 中显示

Android:如何在我的 Activity 中启动电话,然后再返回?

android - 在从 url 将图像加载到 ImageView 之前会出现白屏

java - 在android上,获取xml rsa公钥并用它加密一个字符串

android - 如何在android中创建s曲线布局

c# - Windows Phone 7 通话记录 - Mango API