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

因塔布·海德尔

我想获取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;
    }
}
yushulx

确保您可以得到正确的联系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;
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用ContentProvider从联系人获取电话号码-Android

Android-从电话号码获取联系人照片

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

从电话号码获取实际的联系人姓名

从联系人列表中获取电话号码

通过联系人姓名获取电话号码

我如何获取所选联系人的电话号码

Android如何通过我的通话记录联系人电话号码获取联系人ID

在Android中使用电话号码获取联系人姓名

Android在ArrayList中获取所有联系人的电话号码

从ListView中选择联系人,并在Android中获取他们的电话号码

从联系人Android获取一个电话号码

搜索联系人并从android中的电话联系人获取联系人号码

使用联系人Android Studio的电话号码在联系人列表中打开联系人信息

如何选择联系人的非默认电话号码?

如何从联系人到我的SMS应用程序获取电话号码

在Swift中获取联系人姓名和电话号码

快速获取带有ContactsUI的所有联系人电话号码

iOS通讯录如何通过电话号码获取联系人

如何从他的电话号码中获取联系人的姓名

如何获取所需的联系人显示名称基于反应本机中的电话号码

如何获取给定电话号码的联系人姓名

以编程方式更新android中的联系人姓名和电话号码

在Android中使用两个或多个电话号码创建联系人

使用Loader的Android联系人电话号码无效列数据1

在ngCordova Contacts插件中获取所有联系人至少一个电话号码

我们如何使用Iphone应用程序中的swift从联系人获取电话号码?

在javascript中通过google登录获取所有用户的联系人列表(包括电话号码)

将工作表单元格值中的电话号码与 Google 联系人匹配并获取全名和地址