安卓通话记录历史应用程序



我该怎么做?我想添加我的电话记录应用程序,时间(开始和结束),如果照片和姓名已经在电话联系中,我想在我的应用程序中添加这张照片和姓名。 如果没有,我想设置默认照片。我想显示电话号码。

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Locale;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.CallLog;
import android.widget.TextView;
public class MainActivity extends Activity {
    TextView PhoneNumber = null;
    TextView Date = null;
//  TextView StartEnd = null;
    TextView Duration = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        PhoneNumber = (TextView) findViewById(R.id.txtPhoneNumber);
        Date = (TextView) findViewById(R.id.txtDate);
    //  StartEndTime = (TextView)findViewById(R.id.txtStartEnd);
        Duration = (TextView) findViewById(R.id.txtDuration);
        getCallDetails();
    }
    private void getCallDetails() {
        StringBuffer sbPhoneNumber = new StringBuffer();
        StringBuffer sbDate = new StringBuffer();
        // StringBuffer sbStart = new StringBuffer();
        StringBuffer sbDuration = new StringBuffer();
        Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI, null,
                null, null, null);
        int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER);
        int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE);
        int date = managedCursor.getColumnIndex(CallLog.Calls.DATE);
        int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION);
        while (managedCursor.moveToNext()) {
            String phNum = managedCursor.getString(number);
            String callTypeCode = managedCursor.getString(type);
            String strcallDate = managedCursor.getString(date);
            Date callDayTime = new Date(Long.valueOf(strcallDate));
            String dateStr = new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH).format(callDayTime);
            String callDuration = managedCursor.getString(duration);
            String callType = null;
            int callcode = Integer.parseInt(callTypeCode);
            switch (callcode) {
            case CallLog.Calls.OUTGOING_TYPE:
                callType = "Outgoing";
                break;
            case CallLog.Calls.INCOMING_TYPE:
                callType = "Incoming";
                break;
            case CallLog.Calls.MISSED_TYPE:
                callType = "Missed";
                break;
            }
            sbPhoneNumber.append(phNum + " (" + callType + ") ");
            sbDate.append(dateStr);
            sbDuration.append(callDuration);
        }
        managedCursor.close();
        PhoneNumber.setText(sbPhoneNumber);
        Date.setText(sbDate);
        Duration.setText(sbDuration);
    }
}

步骤1:目前您使用呼叫日志API **来检索日志历史记录,我建议您使用**联系人合同API检索该号码的相关电话号码和照片,如下所示。

让我们从联系人中检索照片,我们可以将一种方法编写为

  private void retrieveContactPhoto() {
            Bitmap photo = null;
            try {
// contacts API
                InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(getContentResolver(),
                        ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, new Long(contactID)));
                if (inputStream != null) {
                    photo = BitmapFactory.decodeStream(inputStream);
                    ImageView imageView = (ImageView) findViewById(R.id.img_contact);
                    imageView.setImageBitmap(photo);
                }
                assert inputStream != null;
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

第 2 步:联系电话也是如此

private void retrieveContactNumber() {
        String contactNumber = null;
        // getting contacts ID
        Cursor cursorID = getContentResolver().query(uriContact,
                new String[]{ContactsContract.Contacts._ID},
                null, null, null);
        if (cursorID.moveToFirst()) {
            contactID = cursorID.getString(cursorID.getColumnIndex(ContactsContract.Contacts._ID));
        }
        cursorID.close();
        Log.d(TAG, "Contact ID: " + contactID);
        // Using the contact ID now we will get contact phone number
        Cursor cursorPhone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER},
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " +
                        ContactsContract.CommonDataKinds.Phone.TYPE + " = " +
                        ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE,
                new String[]{contactID},
                null);
        if (cursorPhone.moveToFirst()) {
            contactNumber = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        }
        cursorPhone.close();
        Log.d(TAG, "Contact Phone Number: " + contactNumber);
    }

步骤3:用于检索联系人姓名

private void retrieveContactName() {
    String contactName = null;
    // querying contact data store
    Cursor cursor = getContentResolver().query(uriContact, null, null, null, null);
    if (cursor.moveToFirst()) {
        // DISPLAY_NAME = The display name for the contact.
        // HAS_PHONE_NUMBER =   An indicator of whether this contact has at least one phone number.
        contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
    }
    cursor.close();
    Log.d(TAG, "Contact Name: " + contactName);
} 

Step4: 为了使用联系人,您必须在Android清单文件中设置权限,如下所示。

<uses-permission android:name="android.permission.READ_CONTACTS" />

最新更新