公司“单位通讯录”项目

xupp 2013-04-08 10:05:39
这个是公司的项目哟,其中界面我修改了,不可能跟公司的一样撒!所以不要吐槽我的UI了。
项目介绍:
获取手机上的联系人信息(SIM卡的不考虑,用的人少。)
获取手机上联系人群组信息(主要就是实现这个功能,有些人会用群组的。)
单位通讯录导入(就是单位的通讯录拉,联系人太多客户不想把这些存在手机上。所以我们直接用TXT读取。)
以字母排序的列表(仿Iphone的效果)
来电显示人名(因为单位通讯录的人没在手机上存储,所以当单位通讯录中的联系人来电时,显示人名)

首先就是做获取手机上的所有联系人,这个非常简单啦,网上一大顿我就不说了!这里做了一个处理,就是模糊查询联系人时,用拼音首字母和电话号码。具体的在代码中看吧!



在做手机联系人分组的时候,在网上看了一下。有直接在数据库里连接查询的。但是发现当数据量大的时候,速度会很慢,于是想到了。用组ID查这个组下面的联系人RAW_CONTACT_ID这个查询速度会非常快。再用每个组下面的联系人RAW_CONTACT_ID,在全部联系人中找。有这个RAW_CONTACT_ID就表示是这个组下面的联系人,在取出名字和电话!在数据大的时候,这个可以解决查询慢的问题。
/**
* 查询分组的联系人方法 groupID是分组的id
*
* @param groupID
* @return
*/
private List<Long> getContactsIDsByGroup(long groupID) {
List<Long> list = new ArrayList<Long>();
// 思路 我们通过组的id 去查询 RAW_CONTACT_ID, 通过RAW_CONTACT_ID去查询联系人
// 要查询得到 data表的Data.RAW_CONTACT_ID字段
String RAW_CONTACTS_WHERE = CommonDataKinds.GroupMembership.GROUP_ROW_ID
+ "=?"
+ " and "
+ ContactsContract.Data.MIMETYPE
+ "="
+ "'"
+ CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE + "'";
// 通过分组的id outid;查询得到RAW_CONTACT_ID
Cursor cursor = resolver.query(Data.CONTENT_URI,
new String[] { Data.RAW_CONTACT_ID }, RAW_CONTACTS_WHERE,
new String[] { "" + groupID }, "data1 asc");
while (cursor.moveToNext()) {
// RAW_CONTACT_ID
long contactId = cursor.getLong(0);
list.add(contactId);
}
cursor.close();
return list;
}

//查询一个分组下联系人的详细信息.xupangpang

@SuppressWarnings("unused")
public List<ConnectEntry> queryLocalConnectGroupList(long groupID){
List<Long> contactIDS = getGroupContactIDs(groupID);
List<ConnectEntry> subList = new ArrayList<ConnectEntry>();
List<ConnectEntry> list=queryLocalConnectLists(false,null);
for (int i = 0; i < contactIDS.size(); i++) {
ConnectEntry connectEntry = new ConnectEntry();
for (int j = 0; j < list.size(); j++) {
if (contactIDS.get(i).equals(list.get(j).getContactid())){
connectEntry.setContactid(list.get(j).getContactid());
connectEntry.setGroupID(groupID);
connectEntry.setGroupName("");
connectEntry.setUserName(list.get(j).getUserName());
connectEntry.setTelePhoneNum(list.get(j).getTelePhoneNum());
subList.add(connectEntry);
}
}
}


return subList;

}

做单位通讯录导入的时候,最先想到的就是读文件。没什么好说的,直接上代码。读取之后是建立数据库的,这样方便操作。文件类型为TXT,最先我想以后更新单位通讯录数据的时候,直接把TXT文件放到SD卡上把,日期一改就可以自动更新,但是客户说不用了,所以取消了。不过代码没删!
package cn.wangan.contact.utils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.SharedPreferences;
import cn.wangan.contact.dbhelp.ShowMyMainOperatorHelpor;
import cn.wangan.contact.entry.ConnectEntry;

public class ShowUnitsContactExportHelpor implements Serializable {

/**
* 读TXT文件
*/
private static final long serialVersionUID = 1L;

/**
* 创建其progressdialog 的进度条
*/
public void doCreateProgressDialog(Context context,SharedPreferences shared) {

String versionName = ""; // 版本号
final ProgressDialog dialog = new ProgressDialog(context);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setTitle("单位通讯录导入");
dialog.setIndeterminate(false);
dialog.setCancelable(false);
final List<String> groupList = new ArrayList<String>();
final List<ConnectEntry> connectList = new ArrayList<ConnectEntry>();
String groupName = "";
try {
InputStream inputStream = context.getAssets().open("vcf0001.txt");
if(inputStream == null){
ToastHelpor.shortToast(context, "为能找到相应的数据库文件更新");
return;
}
BufferedReader br = new BufferedReader(new InputStreamReader(
inputStream, "gbk"));
String count = null;
while ((count = br.readLine()) != null) {
if (count.contains(":")) {
versionName = count.split(":")[1];
if(versionName.equals(shared.getString("VERSION_NAME", "135"))){
return;
}
} else if (count.contains(" ")) {
ConnectEntry entry = new ConnectEntry();
entry.setUserName(count.split(" ")[0]);
entry.setTelePhoneNum(count.split(" ")[1]);
entry.setGroupName(groupName);
connectList.add(entry);
} else {
groupName = count;
groupList.add(count);
}
count = null;
}
br.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
// 设置其相应的版本
final ShowMyMainOperatorHelpor helpor = new ShowMyMainOperatorHelpor(context);
shared.edit().putString("VERSION_NAME", versionName).commit();
final int values = connectList.size();
dialog.setMax(values);
dialog.show();
new Thread() {
@Override
public void run() {
helpor.insertUnitsDataGroup(groupList, connectList);
for (int i = 0; i < values; i++) {
helpor.insertUnitsDataEntry(connectList.get(i));
dialog.setProgress(i+1);
}
dialog.dismiss();
};
}.start();
}


}


package cn.wangan.contact.dbhelp;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
*创建数据库
*/
public class SqliteDBHelpor extends SQLiteOpenHelper {

public SqliteDBHelpor(Context context) {
super(context, "wa_contacts.db", null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table wa_contacts(id integer primary key autoincrement," +
"userName varchar(50),telePhone varchar(100),groupID integer,groupName varchar(50)," +
"keySearch varchar(50), shortKeySearch varchar(10))";
db.execSQL(sql);

String sqlString = "create table wa_contacts_group(id integer primary key autoincrement," +
"groupName varchar(50),createTime varchar(20))";
db.execSQL(sqlString);

// String localSql = "create table wa_local_contacts(id integer primary key autoincrement," +
// "contactId long,telePhone varchar(100))";
// db.execSQL(localSql);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS wa_contacts");
db.execSQL("DROP TABLE IF EXISTS wa_contacts_group");
onCreate(db);
}


}

接下来就是对数据库进行操作了,这个就不说了,自己怎么建的数据库,就怎么操作!不懂的就大家交流一下...
来电显示人名,这个的最先听师兄说来电界面,都是系统在数据库里查询显示出来的。这个可以在来电界面数据库里面添加进去,然后来电画面就可以显示了。但是研究了很久都没进展。所以果断用覆盖图层的方式。。这个是我在网上找的,他是仿Iphone的界面来做全覆盖。我把它变成类似于360等软件的来电显示归属地那种了!

发帖字数限制。没办法全部贴出来。最后想要源码的就留邮箱咯!公司项目没办法呀!
...全文
640 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxchenglong 2015-01-26
  • 打赏
  • 举报
回复
133189966@qq.com 谢谢,麻烦发下源码
gwp0007 2014-07-15
  • 打赏
  • 举报
回复
8819221@qq.com,谢谢了!
chenyinde 2014-01-01
  • 打赏
  • 举报
回复
chenyinde@163.com, 谢谢啊!
烟波蓝_2 2013-11-12
  • 打赏
  • 举报
回复
1282569990@qq.com 谢谢啦!!
轻风无愁 2013-10-12
  • 打赏
  • 举报
回复
153914788@qq.com 最近在做类似的项目,参考下,谢谢了!
唐朝秀才 2013-10-06
  • 打赏
  • 举报
回复
也在寻找类似代码;864390326@qq.com
star190791 2013-09-14
  • 打赏
  • 举报
回复
1452237721@qq.com谢啦!
ghl_2000 2013-08-22
  • 打赏
  • 举报
回复
ghl_2000@163.com,多谢兄台啊。。。
Mikite 2013-05-20
  • 打赏
  • 举报
回复
f-kite@163.com 来一个看看 谢谢
wlcw16 2013-05-16
  • 打赏
  • 举报
回复
409349829@qq.com 谢~
u010714914 2013-05-16
  • 打赏
  • 举报
回复
neimenggu1999@163.com 谢谢楼主
  • 打赏
  • 举报
回复
1258624735@qq.com 谢谢大神给一份吧!
zkbao 2013-05-16
  • 打赏
  • 举报
回复
zk_129@163.com 谢谢楼主的无私共享
line1213 2013-04-12
  • 打赏
  • 举报
回复
hark100@163.com
shs1989 2013-04-11
  • 打赏
  • 举报
回复
5125485@qq.com
果子黎 2013-04-10
  • 打赏
  • 举报
回复
抱着学习心态: stutelepower@yahoo.com.cn
韮菜饼 2013-04-10
  • 打赏
  • 举报
回复
公司...项目...源码,这也可以啊
豆豆虫豆豆 2013-04-09
  • 打赏
  • 举报
回复
joetang09@163.com 谢谢楼主了
顾小林 2013-04-09
  • 打赏
  • 举报
回复
感谢楼主
顾小林 2013-04-09
  • 打赏
  • 举报
回复
332401890@qq.com你可以上传源码 打CSDN的代码区 然后贴一下连接就好了
加载更多回复(3)

80,337

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧