获取手机通讯录放入PinnedSectionListView中,按名字首字母排序,并且实现拨打电话功能。

时间:2023-03-08 19:26:20
获取手机通讯录放入PinnedSectionListView中,按名字首字母排序,并且实现拨打电话功能。
 package com.lixu.tongxunlu;

 import java.util.ArrayList;
import com.lixu.tongxunlu.PinnedSectionListView.PinnedSectionListAdapter;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.TextView; public class MainActivity extends Activity {
private ArrayList<Contacts> contacts;
private ArrayList<Data> data; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 去掉标题头
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
// 设置程序全屏
toggleFullscreen(true); data = new ArrayList<Data>();
contacts = new ArrayList<Contacts>();
// 获取手机联系人后装到contacts中
getcontacts(contacts); int A = (int) 'A';
for (int i = 0; i < 26; i++) {
int letter = A + i;
char c = (char) letter; Data group = new Data(); group.type = Data.GROUP;
group.text = c + "";
data.add(group);
for (int j = 0; j < contacts.size(); j++) {
Contacts cc = contacts.get(j);
String ss = cc.firstLetterofNmae();
// 判断联系人名字首字母是否和组名字母一样,一样后加入本组
if (ss.equals(group.text)) {
Data child = new Data();
child.type = Data.CHILD;
child.text = cc.name + "" + cc.getPhoneNumbers();
child.contacts = cc;
data.add(child);
} } } PinnedSectionListView pslv = (PinnedSectionListView) findViewById(R.id.pslv); pslv.setAdapter(new MyAdapter(this, -1)); pslv.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 判断点击子菜单才会触发点击事件
if (data.get(position).type == Data.CHILD) {
Data datas = data.get(position);
Contacts contact = datas.contacts;
// 获取电话号码
String number = contact.getPhoneNumbers(); Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + number));
startActivity(intent);
}
}
}); } // 设置程序全屏的方法
public void toggleFullscreen(boolean fullScreen) {
// fullScreen为true时全屏 WindowManager.LayoutParams attrs = getWindow().getAttributes(); if (fullScreen) {
attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
} else {
attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
} getWindow().setAttributes(attrs);
} private class Data {
public static final int GROUP = 0;
public static final int CHILD = 1;
public static final int STYE = 2;
public String text;
public int type;
public Contacts contacts = null; } private class MyAdapter extends ArrayAdapter implements PinnedSectionListAdapter {
private LayoutInflater flater; public MyAdapter(Context context, int resource) {
super(context, resource);
flater = LayoutInflater.from(context);
} @Override
public int getCount() {
return data.size();
} @Override
public Object getItem(int position) {
return data.get(position);
} @Override
public int getItemViewType(int position) {
return data.get(position).type;
} @Override
public int getViewTypeCount() {
return Data.STYE;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
int type = getItemViewType(position);
Data data = (Data) getItem(position);
switch (type) {
case Data.GROUP:
if (convertView == null)
convertView = flater.inflate(android.R.layout.simple_list_item_1, null); TextView tv = (TextView) convertView.findViewById(android.R.id.text1);
tv.setBackgroundColor(Color.GREEN);
tv.setTextSize(35);
tv.setText(data.text); break; case Data.CHILD:
if (convertView == null)
convertView = flater.inflate(android.R.layout.simple_list_item_1, null); TextView tv1 = (TextView) convertView.findViewById(android.R.id.text1);
tv1.setTextSize(20);
tv1.setText(data.text); break; default:
break;
}
return convertView;
} @Override
public boolean isItemViewTypePinned(int viewType) {
boolean type = false;
switch (viewType) {
case Data.CHILD: type = false; break; case Data.GROUP: type = true; break; default:
break;
}
return type;
} } // 获取手机联系人的方法
private void getcontacts(ArrayList<Contacts> contacts) {
Uri uri = Uri.parse("content://com.android.contacts/contacts");
ContentResolver resolver = this.getContentResolver();
// 给query传递一个SORT_KEY_PRIMARY,让ContentResolver将获得的数据按照联系人名字首字母排序
Cursor cursor = resolver.query(uri, null, null, null,
android.provider.ContactsContract.Contacts.SORT_KEY_PRIMARY);
while (cursor.moveToNext()) {
// 联系人的id
String id = cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts._ID));
// 将联系人按姓名首字母分组
String sort_key_primary = cursor
.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts.SORT_KEY_PRIMARY));
// 获取联系人的名字
String name = cursor
.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts.DISPLAY_NAME));
Contacts mContacts = new Contacts();
mContacts.id = id;
mContacts.name = name;
mContacts.sort_key_primary = sort_key_primary;
// 获取联系人手机号码
Cursor phone = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id, null, null);
// 将获取到的号码遍历
ArrayList<String> phonenumbers = new ArrayList<String>();
while (phone.moveToNext()) {
int phoneFieldColumnIndex = phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
String phonenumber = phone.getString(phoneFieldColumnIndex);
phonenumbers.add(phonenumber);
}
mContacts.phonenumbers = phonenumbers;
contacts.add(mContacts); }
} private class Contacts {
public String id;
public String name;
public String sort_key_primary;
public ArrayList<String> phonenumbers; // 获取汉字首字母转换成大写字母
public String firstLetterofNmae() {
String s = sort_key_primary.charAt(0) + "";
return s.toUpperCase(); } public String getPhoneNumbers() {
String phones = "";
for (int i = 0; i < phonenumbers.size(); i++) {
phones += ":" + phonenumbers.get(i);
}
return phones; }
} }

xml文件:

不要忘记添加各种权限。

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp" > <com.lixu.tongxunlu.PinnedSectionListView
android:id="@+id/pslv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </RelativeLayout>

效果示例图:

获取手机通讯录放入PinnedSectionListView中,按名字首字母排序,并且实现拨打电话功能。