package info.laozhang.Qsms;
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 net.youmi.android.AdManager;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.provider.ContactsContract;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
/**
*
* @author kaka
* @link www.laozhang.info
*
*/
public class ContactListView extends Activity {
private ListView listView;
private AutoCompleteTextView textView;
private TextView emptyView;
private Button btn_add, btn_back;
private Cursor cursor;
private ContactAdapter mAdapter;
private ArrayList<ContactInfo> contactList = new ArrayList<ContactInfo>();
private final static int DIALOG_PROGRESS = 0;
private String smsContent = null;
private String[] autoContact = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contact_view);
initInterface();
// 异步获取手机通讯录
new GetContactTask().execute("");
}
/**
* @function initInterface
*/
private void initInterface() {
smsContent = getIntent().getStringExtra("CONTENT");
listView = (ListView) findViewById(R.id.mylist);
textView = (AutoCompleteTextView) findViewById(R.id.edit);
emptyView = (TextView) findViewById(R.id.empty_data);
btn_add = (Button) findViewById(R.id.btn_add);
btn_back = (Button) findViewById(R.id.btn_back);
listView.setOnItemClickListener(mListClick);
btn_add.setOnClickListener(btnClick);
btn_back.setOnClickListener(btnClick);
emptyView.setVisibility(View.GONE);
}
static {
AdManager
.init("2e70723f13e892c5", "c876b1c2d22811bf", 30, false, "1.0");
}
/**
* @ function btnClick
*
*/
private OnClickListener btnClick = new OnClickListener() {
// 如果短信小于140个字符发送。否则取消。
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_add:
ArrayList<String> noList = new ArrayList<String>();
for (ContactInfo bean : contactList) {
if (bean.getIsChecked()) {
noList.add(bean.getUserNumber());
}
}
if (noList.size() > 0 || smsContent != null) {
new Thread(new SendSmsManager(ContactListView.this, noList,
smsContent)).start();
Toast.makeText(ContactListView.this, "短信已发送......",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(ContactListView.this, "请选择至少一个发送对象......",
Toast.LENGTH_SHORT).show();
}
break;
case R.id.btn_back:
break;
default:
break;
}
finish();
}
};
/**
* @function listview click movation 是否选中联系人
*/
private OnItemClickListener mListClick = new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View view, int position,
long id) {
LinearLayout myView = (LinearLayout) view;
CheckBox cb = (CheckBox) myView.getChildAt(0).findViewById(
R.id.check);
if (cb.isChecked()) {
cb.setChecked(false);
contactList.get(position).isChecked = false;
} else {
cb.setChecked(true);
contactList.get(position).isChecked = true;
}
}
};
// 异步获取手机通讯录
private class GetContactTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
GetLocalContact();
return null;
}
@Override
protected void onPreExecute() {
showDialog(DIALOG_PROGRESS);
}
@Override
protected void onPostExecute(String result) {
if (contactList.size() == 0) {
emptyView.setVisibility(View.VISIBLE);
} else {
// 根据姓名排序
Comparator<ContactInfo> comp = new Mycomparator();
Collections.sort(contactList, comp);
mAdapter = new ContactAdapter(ContactListView.this, contactList);
listView.setAdapter(mAdapter);
listView.setTextFilterEnabled(true);
// 自动填充内容
autoContact = new String[contactList.size()];
for (int c = 0; c < contactList.size(); c++) {
autoContact[c] = contactList.get(c).contactName + "("
+ contactList.get(c).userNumber + ")";
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
ContactListView.this,
android.R.layout.simple_dropdown_item_1line,
autoContact);
textView.setAdapter(adapter);
textView.addTextChangedListener(mTextWatcher);
}
removeDialog(DIALOG_PROGRESS);
}
// 自动填充通讯录
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) {
// 以1开头后跟10位数字
String autoText = s.toString();
if (autoText.length() >= 13) {
Pattern pt = Pattern.compile("\\(([1]\\d{10})\\)");
Matcher mc = pt.matcher(autoText);
if (mc.find()) {
String sNumber = mc.group(1);
DealWithAutoComplete(contactList, sNumber);
Toast.makeText(ContactListView.this, "已选中您搜索的结果!", 1000)
.show();
mAdapter.setItemList(contactList);
mAdapter.notifyDataSetChanged();
}
}
}
private void DealWithAutoComplete(
ArrayList<ContactInfo> contactList, String sNumber) {
for (int i = 0; i < contactList.size(); i++) {
if (sNumber.equals(contactList.get(i).userNumber)) {
if (!contactList.get(i).isChecked) {
contactList.get(i).isChecked = true;
textView.setText("");
}
}
}
}
public void afterTextChanged(Editable s) {
}
};
// 根据姓名排序
public class Mycomparator implements Comparator<ContactInfo> {
public int compare(ContactInfo o1, ContactInfo o2) {
ContactInfo c1 = o1;
ContactInfo c2 = o2;
Collator cmp = Collator.getInstance(java.util.Locale.CHINA);
return cmp.compare(c1.contactName, c2.contactName);
}
}
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_PROGRESS: {
ProgressDialog dialog = new ProgressDialog(this);
dialog.setMessage("获取通讯录中...请稍候");
dialog.setIndeterminate(true);
dialog.setCancelable(true);
return dialog;
}
}
return null;
}
/**
* @function GetLocalContact
*/
private void GetLocalContact() {
cursor = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext()) {
String contactId = cursor.getString(cursor
.getColumnIndex(BaseColumns._ID));
String hasPhone = cursor
.getString(cursor
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (!hasPhone.equals("0")) {
Cursor phones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + contactId, null, null);
while (phones.moveToNext()) {
ContactInfo mInfo = new ContactInfo();
mInfo.contactName = cursor
.getString(cu
没有合适的资源?快使用搜索试试~ 我知道了~
android开源应用,功能齐全
共81个文件
class:39个
java:13个
png:10个
4星 · 超过85%的资源 需积分: 4 13 下载量 59 浏览量
2011-11-19
11:30:52
上传
评论
收藏 459KB RAR 举报
温馨提示
android开源应用 android代码学习,非常不错的android软件 一般android功能都有,力推哦,
资源推荐
资源详情
资源评论
收起资源包目录
Qsms-V2.rar (81个子文件)
Qsms
bin
classes.dex 138KB
Qsms.apk 130KB
info
laozhang
Qsms
NetTab$4.class 788B
NetTabListener.class 3KB
NetTab$1.class 2KB
ContactListView$GetContactTask.class 4KB
SmsListener.class 4KB
SmsListener$1.class 2KB
BaseTab.class 4KB
R$layout.class 567B
ContactListView$2.class 2KB
EditSms$1.class 2KB
ContactListView.class 8KB
R$id.class 956B
R$drawable.class 677B
NetTabListener$1$2.class 1KB
EditSms.class 3KB
NetTabListener$1$1.class 2KB
SendSmsManager.class 3KB
WishSms$1.class 886B
R$attr.class 477B
WishSms$isUpdate.class 3KB
R.class 631B
ContactAdapter.class 3KB
Main.class 716B
R$styleable.class 699B
NetTab$2.class 984B
ContactListView$GetContactTask$1.class 3KB
NetTabListener$1.class 3KB
ContactAdapter$ViewProgressHolder.class 588B
EditSms$2.class 728B
WishSms.class 7KB
R$string.class 577B
NetTab.class 4KB
ContactInfo.class 1KB
NetTab$3.class 897B
ContactListView$GetContactTask$Mycomparator.class 1KB
DBControl.class 2KB
ContactListView$1.class 2KB
R$raw.class 385B
ContactAdapter$ViewHolder.class 626B
resources.ap_ 66KB
res
drawable-ldpi
raw
qsms.db 43KB
drawable-hdpi
drawable
hr.png 3KB
holiday.png 5KB
fun.png 4KB
cake.png 4KB
heart_arrow.png 4KB
friends.png 6KB
ic_menu_search.png 5KB
favorite.png 2KB
icon.png 19KB
share.png 2KB
values
strings.xml 403B
attrs.xml 411B
drawable-mdpi
layout
com_sms_list.xml 587B
edit_sms.xml 1KB
contact_view.xml 3KB
main.xml 208B
com_items.xml 516B
contact_list.xml 2KB
assets
default.properties 364B
gen
info
laozhang
Qsms
R.java 7KB
.settings
org.eclipse.core.resources.prefs 88B
org.eclipse.jdt.core.prefs 629B
src
info
laozhang
Qsms
ContactAdapter.java 2KB
SmsListener.java 3KB
BaseTab.java 2KB
ContactListView.java 9KB
EditSms.java 2KB
ContactInfo.java 1005B
DBControl.java 1KB
NetTabListener.java 3KB
NetTab.java 4KB
SendSmsManager.java 1KB
Main.java 429B
WishSms.java 6KB
.project 840B
.classpath 358B
lib
youmiad-android.jar 97KB
AndroidManifest.xml 2KB
共 81 条
- 1
资源评论
- maxuguang12342013-10-28不错的学习案例,非常适合初学者,感谢
Jonliworld
- 粉丝: 2
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 电子万年历软件仿真(经过多次修改,保证正确性)
- Unity XR 手势射击控制脚本(适用于任何可手势识别的设备)
- 机械设计全自动电表(NB和IC卡表)控制和上壳装配线sw16可编辑非常好的设计图纸100%好用.zip
- 基于matlab的EAN-13条形码识别系统GUI界面.zip代码53
- matlab基于bp神经网络交通信号标志识别GUI界面13个标志.zip代码54
- 电子万年历答辩实物展示视频mp4格式
- 基于python实现的程序,包括哈希感知算法cvHash,图像切割cvsplit,固定目标检测cvRec(附文档ppt)等
- 计算0-10000之间所有偶数的和
- multiled.zip
- 基于php实现的哈希算法的人脸检索
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功