当前位置: 首页 > 面试题库 >

Android-如何从通话记录中获取联系人?

笪建章
2023-03-14
问题内容

我正在尝试从通话记录中获取联系人。我可以使用以下代码从主要联​​系人获取联系电话:

    public void getContacts(View view) {

    Intent intentContact = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
    startActivityForResult(intentContact, 0);

}

public void onActivityResult(int requestCode, int resultCode, Intent intent)
{

    if (requestCode == 0)
    {
        try {
        to.setText(getContactInfo(intent));
        } catch(NullPointerException e) {
                 // Do nothing ;)
        }

    }

}
protected String getContactInfo(Intent intent)
{
    String phoneNumber = to.getText().toString();
    Cursor cursor =  managedQuery(intent.getData(), null, null, null, null);
    while (cursor.moveToNext())
    {
        String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
       String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
      if(phoneNumber.endsWith(">"))
          phoneNumber += ", "+name;
        else
         phoneNumber += name;
        String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

        if ( hasPhone.equalsIgnoreCase("1"))
            hasPhone = "true";
        else
            hasPhone = "false" ;

        if (Boolean.parseBoolean(hasPhone))


        {
            Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
            while (phones.moveToNext())
            {   phoneNumber = phoneNumber + " <" + phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))+">";


               }
            phones.close();
        }


    }
    cursor.close();
    return phoneNumber;
}

它的作用是,当我们单击“联系人”按钮时,它将打开一个包含所有联系人的列表,用户可以选择任何联系人,并且所选联系人将添加到“收件人”字段中。我想做完全相同的事情,但是我不想显示所有联系人,而是只显示最近使用过的那些(呼叫记录)进行选择的联系人。

如果您还可以告诉如何与组一起执行此操作,那也很好。


问题答案:

我使用自己的版本进行了此操作。我使用了一个对话框,并将光标移到了通话记录。这是函数:

public void getCallLog() {

    String[] callLogFields = { android.provider.CallLog.Calls._ID,
            android.provider.CallLog.Calls.NUMBER,
            android.provider.CallLog.Calls.CACHED_NAME /* im not using the name but you can*/};
    String viaOrder = android.provider.CallLog.Calls.DATE + " DESC";
    String WHERE = android.provider.CallLog.Calls.NUMBER + " >0"; /*filter out private/unknown numbers */

    final Cursor callLog_cursor = getActivity().getContentResolver().query(
            android.provider.CallLog.Calls.CONTENT_URI, callLogFields,
            WHERE, null, viaOrder);

    AlertDialog.Builder myversionOfCallLog = new AlertDialog.Builder(
            getActivity());

    android.content.DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialogInterface, int item) {
            callLog_cursor.moveToPosition(item);

            Log.v("number", callLog_cursor.getString(callLog_cursor
                    .getColumnIndex(android.provider.CallLog.Calls.NUMBER)));

            callLog_cursor.close();

        }
    };
    myversionOfCallLog.setCursor(callLog_cursor, listener,
            android.provider.CallLog.Calls.NUMBER);
    myversionOfCallLog.setTitle("Choose from Call Log");
    myversionOfCallLog.create().show();
}


 类似资料:
  • 我想从Android的联系簿中获得电话号码。我尝试了许多方法,但我无法获得电话号码。我有联系人姓名和状态,但当我尝试获取电话号码时,它不起作用。我的代码是。

  • 我遵循这个示例检索联系人列表,从android设备检索联系人。它提供所有联系人,包括电子邮件联系人和一些空联系人。 我尝试修改Conrects合同,如在投影和选择,以获得移动联系人,但没有工作。 String SELECTION=Conrects合同。联系人。DISPLAY_NAME" 有没有办法只获得有手机号码的联系人?

  • 本文向大家介绍Android获取手机通话记录的方法,包括了Android获取手机通话记录的方法的使用技巧和注意事项,需要的朋友参考一下 Android如何获取手机通话记录,本文为大家揭晓。 获取手机通话记录流程: 1、 获取ContentResolver; ContentResolver resolver = getContentResolver(); 2、resolver.query(*); 需

  • 我是一个新的android和工作的应用程序,我需要所有的去话日志,号码,通话时长和姓名的联系人。所以我的问题是,我能为android系统的calllog.calls.content_uri表获取传出呼叫的名称和号码吗?或者我需要从单独的表中读取它并映射它。下面是我的代码。提前道谢。

  • 我得到了这段代码,但我认为这是不好的方法,如果有像100K的结果,它会返回100K的新用户怎么办?对于,我是否可以使用其他方法,但我不太确定如何实现。另外,是否应该使用块?

  • 我正在开发一个可以在Android系统中记录通话的应用程序。我读过很多讨论通话记录问题的话题。我知道不是所有的Android手机都可以记录通话。但是我想知道如何记录通话,这是游戏市场上最受欢迎的应用程序,比如https://play.google.com/store/apps/details?id=com.appstar.callrecorder或https://play.google.com/s