Android Studio中如何使用ContactsProvider实现联系人信息查询和展示?

作者:镇江麻将开发公司 阅读:37 次 发布时间:2023-06-13 10:30:05

摘要:Android Studio是Android开发中常用的开发工具,它提供了丰富的API和工具,使得开发者能够快速地开发Android应用程序。其中,ContactsProvider是一个非常有用的组件,它可以提供联系人信息的查询和展示功能。本文将详细介绍在Android Studio中如何使用ContactsProvider实现联...

Android Studio是Android开发中常用的开发工具,它提供了丰富的API和工具,使得开发者能够快速地开发Android应用程序。其中,ContactsProvider是一个非常有用的组件,它可以提供联系人信息的查询和展示功能。本文将详细介绍在Android Studio中如何使用ContactsProvider实现联系人信息查询和展示。

Android Studio中如何使用ContactsProvider实现联系人信息查询和展示?

一、ContactsProvider简介

ContactsProvider是Android系统提供的一个内容提供者,它可以提供联系人信息的查询、插入、更新和删除等功能。通过ContactsProvider,我们可以很方便地访问Android设备上的联系人信息,并在应用程序中进行展示或者其他处理。

在Android系统中,ContactsProvider会自动维护一个联系人数据库,包括联系人的姓名、电话、电子邮件、地址等信息。我们可以通过ContactsProvider提供的API获取这些信息,并在应用程序中进行展示或者其他处理。

二、ContactsProvider的使用步骤

在Android Studio中使用ContactsProvider实现联系人信息的查询和展示,大致可以分为以下几个步骤:

1. 在AndroidManifest.xml文件中声明读取联系人信息的权限。

```

```

2. 在布局文件中添加一个ListView控件用于展示联系人信息。

```

android:id="@+id/listView"

android:layout_width="match_parent"

android:layout_height="match_parent" />

```

3. 在Activity中获取ListView控件并设置Adapter。

```

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ListView listView = findViewById(R.id.listView);

ContactsAdapter adapter = new ContactsAdapter(this);

listView.setAdapter(adapter);

}

}

```

4. 创建一个自定义Adapter类,并在其中实现ContactsProvider的查询接口。

```

public class ContactsAdapter extends BaseAdapter implements

LoaderManager.LoaderCallbacks {

private Context mContext;

public ContactsAdapter(Context context) {

mContext = context;

mLoaderManager = ((AppCompatActivity) mContext).getSupportLoaderManager();

mLoaderManager.initLoader(0, null, this);

}

@Override

public int getCount() {

return mCursor != null ? mCursor.getCount() : 0;

}

@Override

public Object getItem(int position) {

if (mCursor != null) {

mCursor.moveToPosition(position);

return mCursor;

}

return null;

}

@Override

public long getItemId(int position) {

if (mCursor != null) {

mCursor.moveToPosition(position);

return mCursor.getLong(mCursor.getColumnIndex(ContactsContract.Contacts._ID));

}

return 0;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

View view = convertView;

ViewHolder holder;

if (view == null) {

view = LayoutInflater.from(mContext).inflate(R.layout.contact_item, parent, false);

holder = new ViewHolder();

holder.name = view.findViewById(R.id.tv_name);

holder.phone = view.findViewById(R.id.tv_phone);

view.setTag(holder);

} else {

holder = (ViewHolder) view.getTag();

}

if (mCursor != null) {

mCursor.moveToPosition(position);

String name = mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

String id = mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts._ID));

String phone = getPhoneNum(id);

holder.name.setText(name);

holder.phone.setText(phone);

}

return view;

}

private static class ViewHolder {

TextView name;

TextView phone;

}

private LoaderManager mLoaderManager;

private Cursor mCursor;

@NonNull

@Override

public Loader onCreateLoader(int id, @Nullable Bundle args) {

String[] projection = new String[]{

ContactsContract.Contacts._ID,

ContactsContract.Contacts.DISPLAY_NAME,

};

return new CursorLoader(mContext,

ContactsContract.Contacts.CONTENT_URI,

projection,

null,

null,

null);

}

@Override

public void onLoadFinished(@NonNull Loader loader, Cursor data) {

mCursor = data;

notifyDataSetChanged();

}

@Override

public void onLoaderReset(@NonNull Loader loader) {

mCursor = null;

notifyDataSetChanged();

}

private String getPhoneNum(String contactId) {

String phoneNum = "";

Cursor cursor = mContext.getContentResolver().query(

ContactsContract.CommonDataKinds.Phone.CONTENT_URI,

null,

ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?",

new String[]{contactId},

null);

if (cursor != null) {

if (cursor.moveToFirst()) {

do {

String phoneNumber = cursor.getString(

cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

phoneNum += phoneNumber;

phoneNum += ", ";

} while (cursor.moveToNext());

cursor.close();

}

}

return phoneNum;

}

}

```

5. 在自定义Adapter类中实现ContactsProvider的查询接口,并通过LoaderManager加载查询结果。

```

private LoaderManager mLoaderManager;

private Cursor mCursor;

@Override

public Loader onCreateLoader(int id, @Nullable Bundle args) {

String[] projection = new String[]{

ContactsContract.Contacts._ID,

ContactsContract.Contacts.DISPLAY_NAME,

};

return new CursorLoader(mContext,

ContactsContract.Contacts.CONTENT_URI,

projection,

null,

null,

null);

}

@Override

public void onLoadFinished(@NonNull Loader loader, Cursor data) {

mCursor = data;

notifyDataSetChanged();

}

@Override

public void onLoaderReset(@NonNull Loader loader) {

mCursor = null;

notifyDataSetChanged();

}

```

6. 在自定义Adapter类中实现getView方法,将查询结果展示在界面上。

```

@Override

public View getView(int position, View convertView, ViewGroup parent) {

View view = convertView;

ViewHolder holder;

if (view == null) {

view = LayoutInflater.from(mContext).inflate(R.layout.contact_item, parent, false);

holder = new ViewHolder();

holder.name = view.findViewById(R.id.tv_name);

holder.phone = view.findViewById(R.id.tv_phone);

view.setTag(holder);

} else {

holder = (ViewHolder) view.getTag();

}

if (mCursor != null) {

mCursor.moveToPosition(position);

String name = mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

String id = mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts._ID));

String phone = getPhoneNum(id);

holder.name.setText(name);

holder.phone.setText(phone);

}

return view;

}

```

7. 实现getPhoneNum方法,将联系人的电话号码与联系人一起显示在ListView中。

```

private String getPhoneNum(String contactId) {

String phoneNum = "";

Cursor cursor = mContext.getContentResolver().query(

ContactsContract.CommonDataKinds.Phone.CONTENT_URI,

null,

ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?",

new String[]{contactId},

null);

if (cursor != null) {

if (cursor.moveToFirst()) {

do {

String phoneNumber = cursor.getString(

cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

phoneNum += phoneNumber;

phoneNum += ", ";

} while (cursor.moveToNext());

cursor.close();

}

}

return phoneNum;

}

```

三、总结

本文介绍了在Android Studio中使用ContactsProvider实现联系人信息查询和展示的步骤,包括权限声明、布局设计、Adapter编写等内容。使用ContactsProvider可以使得开发者更加方便地处理联系人信息,并在应用程序中实现更加丰富的功能。希望本文能够对Android开发者有所帮助。

  • 原标题:Android Studio中如何使用ContactsProvider实现联系人信息查询和展示?

  • 本文链接:https:////zxzx/14864.html

  • 本文由深圳飞扬众网小编,整理排版发布,转载请注明出处。部分文章图片来源于网络,如有侵权,请与飞扬众网联系删除。
  • 微信二维码

    CTAPP999

    长按复制微信号,添加好友

    微信联系

    在线咨询

    点击这里给我发消息QQ客服专员


    点击这里给我发消息电话客服专员


    在线咨询

    免费通话


    24h咨询☎️:166-2096-5058


    🔺🔺 棋牌游戏开发24H咨询电话 🔺🔺

    免费通话
    返回顶部