1

自分にかかってきた最後の着信「番号」を調べるにはどうすればよいですか?(着信)

次のコードには答えないでください。エラーがあります (クラスが拡張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;
        }

    }
}
}

発信については知っていますが、着信についてはどうですか?

4

2 に答える 2

3

前の回答のコードは少し間違っていると思います。

メソッドの最初の引数はqueryURI にする必要があります。

次の訂正を参照してください。

        //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();
于 2013-08-30T10:10:03.430 に答える