package com.android.kangbo;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.Contacts;
import android.provider.ContactsContract;
import android.provider.Contacts.People;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.PhoneLookup;
import android.provider.ContactsContract.RawContacts;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CursorAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class CallActivity extends Activity {
/** Called when the activity is first created. */
ListView listView;
AutoCompleteTextView textView;
TextView emptytextView;
protected CursorAdapter mCursorAdapter;
protected Cursor mCursor = null;
protected ContactAdapter2 ca2;
ArrayList<ContactInfo> contactList = new ArrayList<ContactInfo>();
// 选中的手机号
protected String numberStr = "";
protected String[] autoContact = null;
protected String[] wNumStr = null;
private static final int DIALOG_KEY = 0;
private Button AddContacts;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 自定义标题栏
listView = (ListView) findViewById(R.id.list);
textView = (AutoCompleteTextView) findViewById(R.id.edit);
emptytextView = (TextView) findViewById(R.id.empty);
Button btn_add = (Button) findViewById(R.id.btn_add);
Button btn_back = (Button) findViewById(R.id.btn_back);
AddContacts = (Button) findViewById(R.id.AddContacts);
AddContacts.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO 增加联系人
// 此处是新增加的弹出式对话框
final LinearLayout serverviewLayout = (LinearLayout) getLayoutInflater()
.inflate(R.layout.addcontactlayout, null);
new AlertDialog.Builder(CallActivity.this)
.setTitle("请输入联系人姓名和电话")
.setView(serverviewLayout)
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
// 这里如果要拿到XML中的对话框的话仅仅用findviewbyid是不行的,在之前要使用开始得到的VIEW,例如此题应当:
// 姓名
EditText NameEdit = (EditText) serverviewLayout
.findViewById(R.id.contactName);
// 电话
EditText TelEdit = (EditText) serverviewLayout
.findViewById(R.id.contactTel);
Log.v("添加", "loading");
insertContact(CallActivity.this,
NameEdit.getText().toString(),
TelEdit.getText().toString());
Log.v("添加成功", "success");
Toast.makeText(CallActivity.this,
"添加联系人成功!", Toast.LENGTH_SHORT)
.show();
}
})
.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
}
}).show();
}
});
emptytextView.setVisibility(View.GONE);
// 获取前页传值,如果有手动填写的手机号在通讯录中,则默认勾中
// 如果手动填写的手机号不在通讯录中,则在回传值的时候带回去(不符合手机格式的去除)
wNumStr = new String[] { "123", "456" };
// 启动进程
new GetContactTask().execute("");
// 列表点击事件监听
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View view,
int position, long id) {
// 打电话的功能
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"
+ contactList.get(position).getUserNumber()));
CallActivity.this.startActivity(intent);
}
});
btn_add.setOnClickListener(btnClick);
btn_back.setOnClickListener(btnClick);
}
// 按钮监听
private OnClickListener btnClick = new OnClickListener() {
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_add:
// 打电话的功能
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"
+ textView.getText().toString()));
CallActivity.this.startActivity(intent);
break;
case R.id.btn_back:
finish();
break;
}
}
};
// 监听AUTOTEXT内容变化,当出现符合选中联系人[联系人(手机号)]的情况下,将该勾中,并加入选中手机号中
private TextWatcher mTextWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int before,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int after) {
String autoText = s.toString();
if (autoText.length() >= 13) {
Pattern pt = Pattern.compile("\\(([1][3,5,8]+\\d{9})\\)");
Matcher mc = pt.matcher(autoText);
if (mc.find()) {
String sNumber = mc.group(1);
DealWithAutoComplete(contactList, sNumber);
// 打电话的功能
Intent intent = new Intent(Intent.ACTION_CALL,
Uri.parse("tel:" + sNumber));
CallActivity.this.startActivity(intent);
ca2.setItemList(contactList);
ca2.notifyDataSetChanged();
}
}
}
public void afterTextChanged(Editable s) {
}
};
// 获取通讯录进程
private class GetContactTask extends AsyncTask<String, String, String> {
public String doInBackground(String... params) {
// 从本地手机中获取
GetLocalContact();
// 从SIM卡中获取
GetSimContact("content://icc/adn");
// 发现有得手机的SIM卡联系人在这个路径...所以都取了(每次验证是否已存在)
GetSimContact("content://sim/adn");
return "";
}
@Override
protected void onPreExecute() {
showDialog(DIALOG_KEY);
}
@Override
public void onPostExecute(String Re) {
// 绑定LISTVIEW
if (contactList.size() == 0) {
emptytextView.setVisibility(View.VISIBLE);
} else {
// 按中文拼音顺序排序
Comparator comp = new Mycomparator();
Collections.sort(contactList, comp);
numberStr = GetNotInContactNumber(wNumStr, contactList)
+ numberStr;
ca2 = new ContactAdapter2(CallActivity.this, contactList);
listView.setAdapter(ca2);
listView.setTextFilterEnabled(true);
// 编辑AUTOCOMPLETE数组
autoContact = new String[contactList.size()];
for (int c = 0; c < contactList.size(); c++) {
autoContact[c] = contactList.get(c).contactName + "("
+ contactList.get(c).userNumber + ")";
}
// 绑定AUTOCOMPLETE
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
CallActivity.this,
android.R.layout.simple_dropdown_item_1line,
autoContact);
textView.setAdapter(adapter);
textView.addTextChangedListener(mTextWatcher);
}
removeDialog(DIALOG_KEY);
}
}
// 弹出"查看"对话框
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_KEY: {
Pr
没有合适的资源?快使用搜索试试~ 我知道了~
Android调用系统通讯录,选择联系人
共42个文件
class:20个
xml:7个
java:4个
4星 · 超过85%的资源 需积分: 31 198 下载量 145 浏览量
2013-08-14
16:53:05
上传
评论 4
收藏 88KB RAR 举报
温馨提示
1.Android调用系统通讯录 2.选择联系人 3.拨打电话 4.添加 查询联系人 可直接进行二次开发.
资源推荐
资源详情
资源评论
收起资源包目录
Call.rar (42个子文件)
Call
bin
classes.dex 19KB
com
android
kangbo
CallActivity$4.class 2KB
R$layout.class 503B
CallActivity$GetContactTask.class 4KB
R$id.class 864B
R$drawable.class 431B
CallActivity$3$2.class 860B
CallActivity$1.class 2KB
CallActivity.class 10KB
R$attr.class 340B
R.class 579B
ContactAdapter2.class 3KB
CallActivity$3$1.class 2KB
R$string.class 921B
CallActivity$2.class 2KB
CallActivity$Mycomparator.class 1KB
ContactInfo.class 1KB
ContactAdapter2$ViewProgressHolder.class 594B
CallActivity$3.class 2KB
R$style.class 586B
ContactAdapter2$ViewHolder.class 588B
Call.apk 28KB
resources.ap_ 17KB
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
beijing.jpg 2KB
icon.png 4KB
values
strings.xml 906B
style.xml 2KB
drawable-mdpi
icon.png 3KB
layout
addcontactlayout.xml 459B
main.xml 3KB
contact_list2.xml 1003B
titlebtn.xml 876B
assets
default.properties 362B
gen
com
android
kangbo
R.java 3KB
proguard.cfg 1KB
src
com
android
kangbo
ContactInfo.java 657B
CallActivity.java 13KB
ContactAdapter2.java 2KB
.project 840B
.classpath 280B
AndroidManifest.xml 1KB
共 42 条
- 1
froor
- 粉丝: 31
- 资源: 81
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
前往页