当前位置: 首页 > 知识库问答 >
问题:

从Android联系人簿中获取电话号码

郭博涉
2023-03-14

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

public class ContactsAdapter extends GroupingCursorAdapter {
    public static final String[] PROJECTION = new String[] {
        Phone._ID,
        Phone.LOOKUP_KEY,
        Phone.DISPLAY_NAME,
        Phone.CONTACT_STATUS,
        Phone.TIMES_CONTACTED,
        Phone.LAST_TIME_CONTACTED,
        Phone.STARRED,
        Phone.NUMBER

    };
    public static final int COLUMN_PHONE_ID = 0;
    public static final int COLUMN_LOOKUP_KEY = 1;
    public static final int COLUMN_DISPLAY_NAME = 2;
    public static final int COLUMN_CONTACT_STATUS = 3;
    public static final int COLUMN_TIMES_CONTACTED = 4;
    public static final int COLUMN_LAST_TIME_CONTACTED = 5;
    public static final int COLUMN_STARRED = 6;
    public static final int COLUMN_NUMER=7;

    private class ViewCache {
        public final TextView contactName;
        public final TextView contactLastDialed;
        public final TextView contactInformation;
        public final TextView contactCallCount;
        public final ImageView contactImage;
        public final ImageView contactStarred;

        public ViewCache(View base) {
            contactName = (TextView)base.findViewById(R.id.ContactName);
            contactLastDialed = (TextView)base.findViewById(R.id.ContactLastDialed);
            contactInformation = (TextView)base.findViewById(R.id.ContactInformation);
            contactCallCount = (TextView)base.findViewById(R.id.ContactCallCount);
            contactImage = (ImageView)base.findViewById(R.id.ContactImage);
            contactStarred = (ImageView)base.findViewById(R.id.ContactStarred);
        }

    }


    private Resources mResources;
    private AsyncContactImageLoader mAsyncContactImageLoader;
    private boolean mShowCallCounter;

    public ContactsAdapter(Context context, Cursor cursor, AsyncContactImageLoader asyncContactImageLoader) {
        super(context, cursor, Phone.LOOKUP_KEY);
        mResources = context.getResources();
        mAsyncContactImageLoader = asyncContactImageLoader;
        mShowCallCounter = false;
    }


    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        if (shouldBeGrouped(cursor)) { // we just hide the grouped views
            View view = new View(context);
            view.setLayoutParams(new AbsListView.LayoutParams(0, 0));
            return view;
        }
        View view = LayoutInflater.from(context).inflate(R.layout.contact_item, null);
        ViewCache viewCache = new ViewCache(view);
        view.setTag(viewCache);

        return view;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        final ViewCache viewCache = (ViewCache)view.getTag();
        if (viewCache == null) { // empty view has no viewcache, and we do nothing with it
            return;
        }
        String displayName = cursor.getString(COLUMN_DISPLAY_NAME);
        if (displayName == null) {
            displayName = "";
        }

        viewCache.contactName.setText(displayName);

        long lastTimeContacted = cursor.getLong(COLUMN_LAST_TIME_CONTACTED);
        if (lastTimeContacted == 0) {
            viewCache.contactLastDialed.setText(mResources.getString(R.string.not_contacted));
        } else {
            viewCache.contactLastDialed.setText(DateUtils.getRelativeTimeSpanString(lastTimeContacted));
        }      
savedInstanceState;
        String number= cursor.getString(COLUMN_NUMBER);
        if (status == null) {
            number= "03324004738 Dummy";
        }

        status = status.replace('\n', ' ');
        viewCache.contactInformation.setText(status);

        int timesContacted = cursor.getInt(COLUMN_TIMES_CONTACTED);
        if (mShowCallCounter) {
            viewCache.contactCallCount.setText("(" + timesContacted + ")");
        } else {
            viewCache.contactCallCount.setText("");
        }

        int starred = cursor.getInt(COLUMN_STARRED);
        viewCache.contactStarred.setVisibility(starred == 1? View.VISIBLE : View.GONE);

        String lookupKey = cursor.getString(COLUMN_LOOKUP_KEY);
        if (lookupKey == null) { // should absolutely never happen
            lookupKey = "";
        }
        viewCache.contactImage.setTag(lookupKey); // set a tag for the callback to be able to check, so we don't set the contact image of a reused view
        Drawable d = mAsyncContactImageLoader.loadDrawableForContact(lookupKey, new ImageCallback() {

            @Override
            public void imageLoaded(Drawable imageDrawable, String lookupKey) {
                if (lookupKey.equals(viewCache.contactImage.getTag())) {
                    viewCache.contactImage.setImageDrawable(imageDrawable);
                }
            }
        });
        viewCache.contactImage.setImageDrawable(d);
    }

    public void setShowCallCounter(boolean showCallCounter) {
        mShowCallCounter = showCallCounter;
    }
}

共有1个答案

浦德义
2023-03-14

确保您可以获得正确的联系人lookupkey。这是我的代码。您可以测试它。

private static final String[] PHONE_PROJECTION = { Phone.NUMBER, };
private static final String PHONE_LOOKUP_KEY_SELECTION = Data.LOOKUP_KEY
            + "=?" + " AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE
            + "'";
public String getPhoneNumber(String lookupKey) {
        String result = null;
        Cursor cursor = null;
        try {
            cursor = mContext.getContentResolver().query(Data.CONTENT_URI,
                    PHONE_PROJECTION, PHONE_LOOKUP_KEY_SELECTION,
                    new String[] { lookupKey }, null);
            if (cursor != null && cursor.moveToFirst()) {
                result = cursor.getString(0);
            }
        } catch (Exception e) {

        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }
        return result;
    }
 类似资料:
  • 我遵循这个示例检索联系人列表,从android设备检索联系人。它提供所有联系人,包括电子邮件联系人和一些空联系人。 我尝试修改Conrects合同,如在投影和选择,以获得移动联系人,但没有工作。 String SELECTION=Conrects合同。联系人。DISPLAY_NAME" 有没有办法只获得有手机号码的联系人?

  • 问题内容: 我正在尝试根据给定的联系人电话号码检索联系人姓名。我做了一个可以在所有API版本中使用的函数,因为我无法使其在1.6版中运行,而且我也看不到问题所在,也许有人可以发现它? 请注意,我已经为字符串替换了API常量,因此没有过时的警告问题。 问题答案: 使用反射而不是比较sdk版本。

  • 本文向大家介绍Android获取手机联系人电话号码并返回结果,包括了Android获取手机联系人电话号码并返回结果的使用技巧和注意事项,需要的朋友参考一下 之前做了一个小练习需要用到获取手机里联系人的电话号码,通过查阅相关的资料,自己尝试写了一个小例子,可以成功获取。 首先需要在AndroidManifest.xml中获取权限 xml布局文件 MainActivity.java 以上就是本文的全部

  • 背景: 我为android写了一个简单的小拨号器,可以拨打联系人的电话号码 问题: 我想打电话给联系人,而不是电话号码,这样Android: 如果联系人有两个号码:将启动电话号码选择对话框,然后启动通话 当然,我可以从头开始实现一个弹出窗口,但我更愿意委托给一个标准操作,这样用户就可以使用与使用标准拨号器相同的用户体验。

  • 我已经创建了一个联系人列表,但当我点击任何联系人时,我只能从列表视图中获得android屏幕上第一个项目的联系人号码。 我想得到该职位点击联系人的电话号码。我在网上到处搜索但没有得到任何解决方案,我在过去13天里一直在尝试解决这个问题,但仍然无法解决这个问题,如果有人可以解决这个问题,请回答。谢谢你的帮助兄弟/姐妹!

  • 问题内容: 我正在尝试从通话记录中获取联系人。我可以使用以下代码从主要联​​系人获取联系电话: 它的作用是,当我们单击“联系人”按钮时,它将打开一个包含所有联系人的列表,用户可以选择任何联系人,并且所选联系人将添加到“收件人”字段中。我想做完全相同的事情,但是我不想显示所有联系人,而是只显示最近使用过的那些(呼叫记录)进行选择的联系人。 如果您还可以告诉如何与组一起执行此操作,那也很好。 问题答案