手机批量导入通讯录apk使用说明
- 格式:doc
- 大小:880.00 KB
- 文档页数:6
将IPHONE电话本导入
Android手机操作指导
一将IPHONE的电换本和PC机同步
1 安装IPHONE后台软件ITUNES,安装成功后提示如下界面,点击结束完成安装;
2 打开ITUNES后进入主界面如下;
3 选择“信息”标签页;
4 勾选通讯录中的“同步通讯录”,点击应用,开始同步;
5 这时会跳出一个对话框,选择不发送即可,如下图;
6 iTunes开始备份Administrator的iPhone;
7 iTunes开始与iPhone同步通讯录;
8 同步完成后,iTunes上方提示“iPhone同步已完成”;
二将PC机通讯录和Android手机同步
1 安装Android手机PC Suite后台软件,安装完成后提示如下界面,点击完成结束安装;
2 打开PC Suite软件,后台将检测设备信息,检测完后提示“设备可以正常使用”;
3 进入正常界面,左下角图表打勾则表示PC已和手机连接上。
4 冲突选项中选择和PC侧一致;同步内容中将您所需要的同步内容勾选上;然后点击开始同步;
5 后台自动开始和电脑同步;
6 同步成功后,提示对话框“同步成功”
7 完成后,关闭该后台软件,整个操作完成。
手机批量导入通讯录(格式为VCF)的方法
批量导入通讯文件(格式为VCF)的方法
主要的思路是把所以的vcf文件先整合到一个vcf文件中,然后再一次导入这个vcf文件就可以。
第一步:Win+R 或者“开始”菜单-“运行”打开
第二步:在输入框中输入“cmd”就可以打开DOS命令行
第三步:将所有的.vcf文件(即所有联系人名片)拷贝到C:\contact(没有就创建一个这个文件夹),运行cd c:\contact命令第四步:运行命令“copy /B *.vcf all.vcf ” ,这样文件夹中所有的vcf文件就会整合成一个叫all.vcf 的文件
第五步:将此文件拷贝到小米手机中,在通讯录中按“设置”-》“导入联系人”中将此vcf 文件导入,则无论你是500个还是1000个联系人都会一次性导入到通讯录中!
备注:
1.拷贝到SD卡根目录下即可,在导入联系人那里选择“从SD卡导入”,系统会自动搜索SD上所有的VCF文件,选择你命名的那份文件即可。
2.导入完成后这个文件就可以删掉了。
至此大功告成,不用一个个输了。
也不需要用到任何7788的软件,直接一个命令搞定!。
一、思路:用Outlook和CSV文件作为数据交换桥梁不同手机平台的通讯录数据导出导入说起来神秘,但其实方法很简单,我们用Windows系统自带的Outlook软件作为桥梁就可以了。
微软Outlook不仅能发送邮件,还拥有强大的联系人管理工具,而业内的霸主地位使得跟手机息息相关的gmail、诺基亚PC套件等都对其联系人格式CSV 提供了支持。
而咱们的联系人转换工作就要围绕Outlook以及它的联系人格式CSV来进行。
编注:CSV文件是一种用逗号分隔字段记录数据的文件格式,经过简单的设置,任何软件都可以识别读取。
导出的CSV联系人文件简言之,我们只要掌握两个步骤即可顺利完成不同手机平台之间的通讯录数据导出导入:将各平台的通讯录数据导出至Outlook,再将Outlook数据导入各平台的通讯录中。
下面我们来看具体做法。
二、将各平台联系人数据导出至OutlookAndroid平台(需要Gmail中转)Android的联系人界面有导入/导出功能,但导出的文件无法被Outlook识别,所以需要gmail中转,将通讯录导出为兼容性更强的CSV文件。
1.为Android手机绑定gmail账号,在联系人界面依次点击“菜单键→账户→添加账户→Google”,然后依据向导提示设置Google账号。
2.将手机通讯录同步至gmail联系人,依次点击“菜单键→账户→自己的账号名称→同步联系人”即可。
点击“同步联系人”即可将联系人信息上传到Gmail3.将联系人导出为Outlook能够识别的CSV格式文件.打开电脑的浏览器,进入gmail的页面,选中所有联系人,接着点击“导出→Outlook CSV 格式→导出”就可以获得名为contacts.csv的联系人数据文件。
注意, Android手机联系人中的头像图片无法导出至Outlook中。
导出时切记必须选择Outlook CSV格式4.将联系人导入Outlook,启动Outlook后点击菜单中的“文件→导入和导出→从另一种程序或文件导入→逗号分隔的值”,然后选择刚才从gmail导出的contacts.csv文件。
如何向安卓批量导入excel中的通讯录
号码丢了,是一件很恼人的事,几百个号要手动写入非常困难,经过一天的摸索,综合网上各种方法,总算摸索出了一个比较实用的方法。
第一步
1〕先在excel中建立自己的通讯录,例如:
第二步
利用360 助手将电脑与连接上〔具体的360 助手里面有〕
点击“360 助手”
点击“开始连接”
点击“开始连接”
具体步骤点击“如何打开”
连接上后,点击“xx个联系人”点击“导入/导出”
保存类型选择“*.xls”,如下列图:
此时会出现提示,点击“确定”
成功导出后,打开文件,如图:
此时,你就可以将电脑里面的通讯录按格式复制到里面了。
也可也改成这种格式,就是少了一些功能
复制完成后,点击“导入/导出”
这个方法是不是很简单呢?
友情提示:图片可以放大。
总结了一下,联系人备份同步有几种方式,我总结一下优缺点吧,不足之处欢迎大家补充gmail帐号同步,无缝结合算是最好的方式,缺点就是需要网络豌豆夹或其他桌面工具备份,优点是不需要联网,缺点是导入后新建联系人不能看到之间备份的分组。
如果导入之后再网络同步的话可能也会出现很多不能同步的问题,不方便以后的管理。
联系人程序中的导入导出,有点是操作方便备份到sd卡。
缺点是不导出分组信息。
MIUI的备份,不需要网络,也不会丢失分组信息。
其他方式大家补充吧我一直是用gmail同步联系人的,所以没发现这个问题,今天看到很多同学反映这个问题,亲自用豌豆夹备份联系人,清空数据,再导入联系人。
果然重现这个问题。
把联系人的数据库导出对比源数据库。
发现用豌豆夹导出联系人分组丢失了分组的帐号信息。
这个不清楚是豌豆夹的设计还是它自身的bug。
这样的话问题就出来了。
在android联系人分组中,每个分组是有帐号类型的,用来表示该分组是属于哪个gmail同步帐号的(也可能是其他帐号),如果在该帐号下创建联系人的话,当选择分组时只能看到该帐号下的分组。
例如我的gmail帐号是abc@, 我在创建新的联系人的时候,这个联系人会被放到这个帐号下,当我选择分组的时候,可以看到这个帐号下的分组。
但是从豌豆夹导入的已有分组没有任何帐号信息,所以不会被看到(在联系人分组中是可以看到所有帐号的分组的)。
如果是在这个时候新建分组,该分组也是在abc@帐号下的,所以这个就可以解释楼主的原因了。
还有个细节不知道大家发现没有,在默认android 分组中是有”朋友,家人,同事“3个分组的,在数据库里这3个分组是系统分组,默认是不能删除的,但是用豌豆夹导入进来之后是可以被删除的,因为system_id丢失了。
如果大家喜欢用gmail同步联系人的话(这也是本人比较推荐的一种方式)不用担心联系人丢失,换手机的话设置一下gmail帐号就可以同步下来了. 用豌豆夹备份导入的联系人可能会不能被同步.解决方式:推荐使用gmail同步联系人,如果喜欢用桌面端(豌豆夹)等管理联系人的话,现在看来也没有太好的解决方式,毕竟是导出之后这些信息丢失了,再导入我们的系统也拿不到那些信息。
现如今,我们更新新手机的速度越来越快了,但换机之后,带来的问题就是通讯录等数据,要如何转移到新手机中呢?今天小编就针对这个问题,教教大家如何将手机通讯录导入到新手机。
方法一:利用SIM卡导入如果你的通讯录数据是存储在SIM卡上的,就可以直接将SIM卡从旧手机中取出,然后再插入新手机,接着在设置中找到“通讯录”选项,进入后再点击下方的“导入 SIM 卡通讯录”即可。
方法二:通过 iCloud 导入iCloud是苹果手机提供的云端备份功能,想必大家都知道它支持同账号,不同设备的数据同步,因此我们可以先在旧手机上打开 iCloud云备份功能,然后在新手机上登录同一个Apple ID,再开启通讯录按钮,点击“合并”即可。
方法三:利用第三方软件恢复并导出如果已经误删了通讯录中的联系人,也别着急,可以先使用开心手机恢复大师进行恢复再导出,我们只需在开心手机恢复大师官网下载软件,运行后默认选择【通过设备扫描恢复】将手机连接至该软件,然后在数据项选择界面中点击需要恢复的【通讯录】图标,并等待系统扫描。
进入恢复界面后,橙色字体显示的就是软件帮我们找回的已经删除的手机联系人,黑色字体显示的是我们目前存储在手机上的联系人,选中我们需要恢复的通讯录好友,再点击右下角【恢复到设备】即可。
如果你动手能力不强,或者完全是个电脑小白,也可以直接在专业人员的帮助下进行恢复。
软件特色在于人工服务,线上一对一对接服务。
苹果用户可以直接在APP store搜索开心手机恢复大师,下载安装后根据个人需求选择相对应的数据恢复服务,工程师接单后开始服务,双方确认数据找回效果即服务结束。
手机通讯录怎么导入到新手机?这些实用的小方法,你都记住了吗?其实开心手机恢复大师不仅可以帮你恢复通讯录,还可以找回误删的微信聊天记录、短信、照片等多项数据哦~。
绝对实用的手机批量导入导出电话薄技巧摆弄手机好多年,从来没有真正尝试在各种手机包括电子文件间转换通讯录的操作,直到昨天2010年9月28日,领导拿过来一台Iphone,里面是近300条Iphone的通讯录,需要导出到另外一台摩托罗拉智能手机上(型号没注意,但可以确定是今年新款),而领导备用的那张卡是只能存储250条号码的普通G网卡。
针对现在手机发展现状,动辄三五百条的通讯录用手机卡转换是很困难的!通常而言,两台智能终端通讯录需要转换,直接用蓝牙对传就行了。
为了方便不熟悉的朋友,提供一下操作方法:两台手机打开蓝牙开关,搜索后匹配,然后在要发出去的手机上进入通讯录,在菜单中选择发送-通过蓝牙,然后全选通讯录后发送,接受的手机选择接收数据即可,正常情况下,上千条的通讯录20分钟内就能发送完毕。
个别“智能手机”蓝牙传输有问题,会慢很多。
提到通讯录共享,就不得不提手机与电子通讯录“同步”,电子通讯录包括.VCF(.vcf)格式的电子文件,以XP为代表的通讯录列表和Yahoo、Google Mail账号等,后两者是目前主流。
拥有一个账号,手机内通讯录导入导出就可以随时随地进行,方便快捷。
据说网易也可以,但是我没用过,网易出面证实一下?嘿嘿。
我遇到的问题挺有意思:苹果不支持蓝牙传输;安装了一款苹果上的Sim卡通讯录软件,但是导出到Sim卡上的联络人都是乱码,而且频频中断,说白了兼容性不好;用Itunes导出呢,我又不喜欢yahoo和Google的账号,没用过……最终,我用91手机助手将苹果中的通讯录导出vcf格式到电脑中,近300个文件,然后开始了漫漫的尝试之旅,此处省去三千字和逝去的时间,写博客是交流,所以我将最终结果整理成经验给需要的朋友们参考吧,我将电话簿导入导出分成若干情况来说。
1.电话与电话间转换,如果是十来个,手工输入就行,如果成百上千,蓝牙绝对是首选,不同品牌不同型号手机之间最方便的解决之道,不过遗憾的是,时至今日,竟然还有“智能手机”不支持蓝牙传电话簿……2.电脑中有以前某个手机的vcf格式的通讯录,不管是什么原因留下的,反正我电脑中有一堆vcf文件,需要同步到手机中,咋办?情况分多种:a 智能手机解决方案:现在好多手机支持与xp的通讯簿同步,很多人会手机电话簿批量导入xp通讯簿,却不会反过来操作,原因是vcf文件一个是一个,xp的通讯簿不支持批量导入。
Android通讯录这是本人学习android一个月以来的第一个比较实用的小程序,此程序可以读取手机自带通讯录上的所有联系人,并且可以导入到这个通讯录列表,不用用户一个一个地输入,将导入的联系人信息保存在SQLite3数据库中,还具有向指定联系人发送短信、打电话、增加、修改联系人等基本功能。
效果图如下所示:代码如下(直接复制即可掩饰效果):====================== DatabaseHelper======================= package liu.sqlite3.db;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.database.sqlite.SQLiteDatabase.CursorFactory;//DatabaseHelper作为一个访问SQLite的助手类,提供两个方面的功能,//第一,getReadableDatabase(),getWritableDatabase()可以获得SQLiteDatabse对象,通过该对象可以对数据库进行操作//第二,提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作public class DatabaseHelper extends SQLiteOpenHelper {private static final int VERSION = 1;//在SQLiteOepnHelper的子类当中,必须有该构造函数public DatabaseHelper(Context context, String name, CursorFactory factory,int version) {//必须通过super调用父类当中的构造函数super(context, name, factory, version);// TODO Auto-generated constructor stub}public DatabaseHelper(Context context,String name){this(context,name,VERSION);}public DatabaseHelper(Context context,String name,int version){this(context, name,null,version);}//该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabse对象的时候,才会调用这个方法@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubSystem.out.println("create a Database");//execSQL函数用于执行SQL语句db.execSQL("create table user(name varchar(20),phone text,qq text,mail text,address text)");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stubSystem.out.println("update a Database");}}package net.yxarm;import java.util.ArrayList;import java.util.HashMap;import liu.sqlite3.db.DatabaseHelper;import android.app.Activity;import android.content.ContentValues;import android.content.Intent;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.util.Log;import android.view.ContextMenu;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.view.ContextMenu.ContextMenuInfo;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class Add_people extends Activity {private EditText editName = null;private EditText editPhone = null;private EditText editQQ = null;private EditText editEmail = null;private EditText editAddress = null;private Button buttonAdd = null;private Button buttonCancel = null;public static int n ;//==============重写Activity中创建Activity的方法========================================@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.second);editName = (EditText) findViewById(R.id.edit_name);editPhone = (EditText) findViewById(R.id.edit_phone);editQQ = (EditText) findViewById(R.id.edit_QQ);editEmail = (EditText) findViewById(R.id.edit_mail);editAddress = (EditText) findViewById(R.id.edit_address);buttonAdd = (Button) findViewById(R.id.button1_add);buttonCancel= (Button) findViewById(R.id.button2_cancel);//判断是否是修改联系人还是重新创建,修改的话将原始信息重新填写到编辑框内,然后下面根据n的值决定调用新建还是修改数据的方法Intent intent = getIntent(); //接收上一个Activity通过intent传过来的数据n = intent.getIntExtra("editpeople", 0);if(n == 1){System.out.println("----上一个Activity传进来的(editpeople)值:" + n);editName.setText(Address_Book.LIST.get(Address_Book.CLICK_ID).get("name").toString()); editPhone.setText(Address_Book.LIST.get(Address_Book.CLICK_ID).get("phone").toString());editQQ.setText(Address_Book.LIST.get(Address_Book.CLICK_ID).get("qq").toString());editEmail.setText(Address_Book.LIST.get(Address_Book.CLICK_ID).get("mail").toString());editAddress.setText(Address_Book.LIST.get(Address_Book.CLICK_ID).get("address").toString());}//设置两个按钮监听事件buttonAdd.setOnClickListener(new MyButtonOnClickListener());buttonCancel.setOnClickListener(new MyButtonOnClickListener());}//======================两个按钮监听处理事件============================================class MyButtonOnClickListener implements OnClickListener {private static final int REQUESCODE2 = 2;public void onClick(View v) {switch(v.getId()) {case R.id.button1_add: //--------------------确定添加此联系人//判断联系人是否可以添加(如:姓名不能为空、电话要有效)if(editName.getText().toString().length()>0 & editPhone.getText().toString().length()>=3 ) {CreateDatabaseHelper(); //创建数据库,将联系人信息保存到数据库(若数据库存在则不会重建)if(n != 1) { //新建联系人,若是修改联系人则不会再添加Address_Book.LIST = Insert(); //返回全部数据给LIST静态列表变量Toast.makeText(Add_people.this, "添加成功", 1).show();System.out.println(".......选择新建联系人");}else if(n == 1) { //修改联系人(n:是点击了修改联系人后传进来的值)Address_Book.LIST = modfiy(); //返回全部数据给LIST静态列表变量Toast.makeText(Add_people.this, "修改成功", 1).show();System.out.println(".......选择修改联系人");}//返回到第一个Activity中显示(所有数据已经保存在LIST静态列表变量中)Intent intent = new Intent();intent.setClass(Add_people.this,Address_Book.class);intent.putExtra("nothing2", 2);startActivityForResult(intent, REQUESCODE2);}else if(editName.getText().toString().equals("")){ //没有输入名字不能添加Toast.makeText(Add_people.this, "请输入联系人姓名", 1).show();}else if( editPhone.getText().toString().length()<3 ) { //电话无效不能添加Toast.makeText(Add_people.this, "请输入有效电话", 1).show();}break;case R.id.button2_cancel: //------------------取消此联系人的添加回到列表界面Toast.makeText(Add_people.this, "取消", 1).show();Intent intent = new Intent(Add_people.this,Address_Book.class);startActivity(intent);break;default: break;}}}//================================创建数据库==========================================public void CreateDatabaseHelper() {//创建一个DatabaseHelper对象DatabaseHelper dbHelper = new DatabaseHelper(Add_people.this,"test_mars_db");//只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库SQLiteDatabase db = dbHelper.getReadableDatabase();}//===========================插入数据并返回全部数据list================================public ArrayList Insert() {//---------------插入新数据-----------------//生成ContentValues对象ContentValues values = new ContentValues();//想该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致values.put("name",editName.getText().toString());values.put("phone",editPhone.getText().toString());values.put("qq",editQQ.getText().toString());values.put("mail",editEmail.getText().toString());values.put("address",editAddress.getText().toString());DatabaseHelper dbHelper = new DatabaseHelper(Add_people.this,"test_mars_db",2);SQLiteDatabase db = dbHelper.getWritableDatabase();//调用insert方法,就可以将数据插入到数据库当中db.insert("user", null, values);//------将更新后的全部数据返回---------//定义一个键值对数组将数据返回到第一个列表Activity中更新进行显示ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();DatabaseHelper dbHelper1 = new DatabaseHelper(Add_people.this,"test_mars_db");SQLiteDatabase db1 = dbHelper1.getReadableDatabase();Cursor cursor = db1.query("user", new String[]{"name","phone","qq","mail","address"}, null, null, null, null, null);while(cursor.moveToNext()){HashMap<String, Object> map = new HashMap<String, Object>();map.put("name", cursor.getString(cursor.getColumnIndex("name")));map.put("phone", cursor.getString(cursor.getColumnIndex("phone")));map.put("qq", cursor.getString(cursor.getColumnIndex("qq")));map.put("mail", cursor.getString(cursor.getColumnIndex("mail")));map.put("address", cursor.getString(cursor.getColumnIndex("address")));}return list; //返回全部数据list用于列表显示}//===========================查询所有数据=================================== public void Query(){DatabaseHelper dbHelper = new DatabaseHelper(Add_people.this,"test_mars_db");SQLiteDatabase db = dbHelper.getReadableDatabase();Cursor cursor = db.query("user", new String[]{"name","phone","qq","mail","address"},"name=?", new String[]{editName.getText().toString()}, null, null, null);while(cursor.moveToNext()){String name1 = cursor.getString(cursor.getColumnIndex("name"));String name2 = cursor.getString(cursor.getColumnIndex("phone"));String name3 = cursor.getString(cursor.getColumnIndex("qq"));String name4 = cursor.getString(cursor.getColumnIndex("mail"));String name5 = cursor.getString(cursor.getColumnIndex("address"));System.out.println("query--->" + name1);System.out.println("query--->" + name2);System.out.println("query--->" + name3);System.out.println("query--->" + name4);System.out.println("query--->" + name5);System.out.println("======================================================");}}//===========================更新(修改)数据===================================public ArrayList modfiy(){//生成ContentValues对象ContentValues values = new ContentValues();//想该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致values.put("name",editName.getText().toString());values.put("phone",editPhone.getText().toString());values.put("qq",editQQ.getText().toString());values.put("mail",editEmail.getText().toString());values.put("address",editAddress.getText().toString());DatabaseHelper dbHelper = new DatabaseHelper(Add_people.this,"test_mars_db",2);SQLiteDatabase db = dbHelper.getWritableDatabase();System.out.println("************修改联系人之前: " + Address_Book.LIST.get(Address_Book.CLICK_ID).toString());db.update("user", values, "name = ?", new String[]{Address_Book.LIST.get(Address_Book.CLICK_ID).get("name").toString()});//------将更新后的全部数据返回---------//定义一个键值对数组将数据返回到第一个列表Activity中更新进行显示ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();DatabaseHelper dbHelper1 = new DatabaseHelper(Add_people.this,"test_mars_db");SQLiteDatabase db1 = dbHelper1.getReadableDatabase();Cursor cursor = db1.query("user", new String[]{"name","phone","qq","mail","address"}, null, null, null, null, null);while(cursor.moveToNext()){HashMap<String, Object> map = new HashMap<String, Object>();map.put("name", cursor.getString(cursor.getColumnIndex("name")));map.put("phone", cursor.getString(cursor.getColumnIndex("phone")));map.put("qq", cursor.getString(cursor.getColumnIndex("qq")));map.put("mail", cursor.getString(cursor.getColumnIndex("mail")));map.put("address", cursor.getString(cursor.getColumnIndex("address")));}return list; //返回全部数据list用于列表显示}}================== Address_Book=========================package net.yxarm;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import liu.sqlite3.db.DatabaseHelper;import android.app.Activity;import android.app.AlertDialog;import android.app.Dialog;import android.app.AlertDialog.Builder;import android.content.ContentResolver;import android.content.ContentValues;import android.content.DialogInterface;import android.content.Intent;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import android.graphics.Color;import .Uri;import android.os.Bundle;import android.provider.ContactsContract;import android.provider.ContactsContract.PhoneLookup;import android.view.ContextMenu;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.view.ContextMenu.ContextMenuInfo;import android.view.MenuItem.OnMenuItemClickListener;import android.view.View.OnFocusChangeListener;import android.view.View.OnLongClickListener;import android.view.View.OnTouchListener;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.AutoCompleteTextView;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemSelectedListener;public class Address_Book extends Activity {private AutoCompleteTextView autotext = null ; //快速查找时对话框中的控件autoTextViewprivate static List<String> listCheck = new ArrayList<String>(); //将所有人的名字保存这数组中实现autoTextViewprivate static final int REQUESCODE1 = 1; //Activity之间传递数据用的startActivityForResult(intent, REQUESCODE);public static int CLICK_ID = 600 ; //保存选中需要删除的id号,默认设置为600表示没选中联系人private ListView listview = null; //列表显示所有联系人数据private SimpleAdapter simpleadapter = null; //适配器public static ArrayList<HashMap<String, Object>> LIST = new ArrayList<HashMap<String,Object>>(); //静态变量,别的Activity使用要用类名引用//==============重写Activity中创建Activity的方法========================================@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.first);Toast.makeText(Address_Book.this, "欢迎使用^@^", 1).show();CLICK_ID = 600 ; //返回这里是都将CLICK_ID初始化为无效值(所以没有点击联系人是不会执行删除、修改动作)//接收mainActivity通过intent传过来的数据,然后判断是否显示快速查找对话框Intent intent1 = getIntent();int n = intent1.getIntExtra("Search_flag", 0);System.out.println("MainActivity传进来的(Search_flag)值:" + n);if(n == 1) {dialogShow(); //显示对话框快速查找}//先查询所有联系人数据并显示出来LIST = Query(); //查询所有联系人并返回到listint size = LIST.size();//---------------------打印输出测试----------------------------System.out.println("---------------->>>>> " + size);for(int i=0;i<size;i++) {System.out.println( Address_Book.LIST.get(i).toString());}listview=(ListView) findViewById(R.id.listview);//注册快捷菜单(长按textView大于2秒就可以弹出快捷菜单)registerForContextMenu(listview);//取消注册//unregisterForContextMenu(textView);simpleadapter = new SimpleAdapter(this, LIST, yout.listviewitem,new String[]{"name","phone"} , new int[]{1,R.id.phone1});listview.setAdapter(simpleadapter);//(点击事件)联系人列表选中单项监听事件,将选中的位置传给静态变量CLICK_ID = position,并Toast提示语listview.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View view,int position, long id) {CLICK_ID = position; //将选中列表的那个的位置传给静态变量CLICK_ID//Toast.makeText(Address_Book.this, "想"+LIST.get(CLICK_ID).get("name").toString()+"啦^@^", 1).show();System.out.println("--Click选中--CLICK_ID-:" + CLICK_ID );//点击后显示背景色绿色if (((ListView)parent).getTag() != null) {((View)((ListView)parent).getTag()).setBackgroundDrawable(null);}((ListView)parent).setTag(view);view.setBackgroundColor(Color.GREEN);}});//(选中事件)联系人列表选中单项监听事件,将选中的位置传给静态变量CLICK_ID = position,并Toast提示语listview.setOnItemSelectedListener(new OnItemSelectedListener() {public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {CLICK_ID = position; //将选中列表的那个的位置传给静态变量CLICK_ID// Toast.makeText(Address_Book.this, "想"+LIST.get(CLICK_ID).get("name").toString()+"啦^@^", 1).show();System.out.println("--Selected选中--CLICK_ID-:" + CLICK_ID );//点击后显示背景色红色if (((ListView)parent).getTag() != null) {((View)((ListView)parent).getTag()).setBackgroundDrawable(null);}((ListView)parent).setTag(view);view.setBackgroundColor(Color.GREEN);}public void onNothingSelected(AdapterView<?> parent) {}});}//==============重写Activity中创建菜单的方法=============================================@Overridepublic boolean onCreateOptionsMenu(Menu menu) {//添加菜单方法2//第一个参数:组//第一个参数:id//第一个参数:排序//第一个参数:菜单名字menu.add(0,0, 0, "从手机导入联系人").setIcon(R.drawable.go);menu.add(0,1, 0, "添加联系人").setIcon(R.drawable.go).setShortcut('1', 'b'); //'b'是快捷键menu.add(0,2, 0, "快速查询").setIcon(R.drawable.jiji);menu.add(0,3, 0, "删除联系人").setIcon(R.drawable.jiji);menu.add(0,4, 0, "拨号").setIcon(oren);menu.add(0,5, 0, "发送短信").setIcon(R.drawable.jiji);menu.add(0,6, 0, "修改联系人").setIcon(R.drawable.jiji);/*//添加菜单方法3//inflater过滤器,后面的menu是public boolean onCreateOptionsMenu(Menu menu)传进来的//前面的menu是引用自己新建的menu.xml文件的ID,里面设置好了所有菜单MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.menu, menu);*/return true;}//==============重写Activity中的主菜单监听事件的方法,根据按下的菜单做相应处理============@Overridepublic boolean onOptionsItemSelected(MenuItem item) {if(item.getItemId() == 0) { //从手机中导入联系人Toast.makeText(Address_Book.this, "正在导入,请稍后···", 3).show();getContactInformation(); //将手机上的联系人导入列表Toast.makeText(Address_Book.this, "导入完成", 3).show();Intent intent = new Intent(Address_Book.this,Address_Book.class);startActivity(intent);} else if(item.getItemId() == 1) { //添加联系人,转到另一个ActivityIntent intent = new Intent();intent.setClass(Address_Book.this,Add_people.class);intent.putExtra("nothing1", 1);startActivityForResult(intent, REQUESCODE1);}else if(item.getItemId() == 2) { //快速查找,弹出对话框dialogShow(); //显示对话框快速查找}else if(item.getItemId() == 3) { //删除联系人if(CLICK_ID != 600) {dialogShow_dele();} else {Toast.makeText(Address_Book.this, "请选择需要删除的联系人", 1).show();}}else if(item.getItemId() == 4) { //拨号if(CLICK_ID != 600) {Intent intent = new Intent();Uri uri ;String data ;data = "tel:"+LIST.get(CLICK_ID).get("phone").toString();uri = Uri.parse(data);intent.setAction(Intent.ACTION_CALL);intent.setData(uri);startActivity(intent);}else {Toast.makeText(Address_Book.this, "请选择一个号码", 1).show();}}else if(item.getItemId() == 5) { //发送短信if(CLICK_ID != 600) {Intent intent = new Intent();intent.putExtra("phone_num", LIST.get(CLICK_ID).get("phone").toString()); //将选中的号码传过去intent.putExtra("name", LIST.get(CLICK_ID).get("name").toString()); //将选中的名字传过去intent.setClass(Address_Book.this, SendMessage.class);startActivityForResult(intent, 1);}else {Toast.makeText(Address_Book.this, "请选择一个号码", 1).show();}}else if(item.getItemId() == 6) { //修改联系人if(CLICK_ID != 600) {System.out.println("************点击了修改联系人: " + LIST.get(CLICK_ID).get("name").toString());Intent intent = new Intent(); //跳转到编辑Activity,并发送编辑联系人标志("editpeople", 1)intent.setClass(Address_Book.this,Add_people.class);intent.putExtra("editpeople", 1); //根据这个参数(键值对)选择是否修改还是重新创建联系人startActivityForResult(intent, REQUESCODE1);} else {Toast.makeText(Address_Book.this, "请选择需要修改的联系人", 1).show();}}return true;}//=================创建一个对话框(快速查找时会弹出)=================================private void dialogShow() {//创建一个对话框AlertDialog.Builder builder = new Builder(this);//设置图标builder.setIcon(R.drawable.jiji);//设置标题builder.setTitle("快速查找联系人").setIcon(oren);//设置文本信息builder.setMessage("请输入'空格+第一个字':").setIcon(R.drawable.jiji);//设置编辑框autotext = new AutoCompleteTextView(this);//创建一个ArrayAdapter对象ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,yout.autocoplist_item,listCheck);//将ArrayAdapter设置给AutoCompleteTextView对象autotext.setAdapter(arrayAdapter);builder.setView(autotext);//设置两个按钮,并设置按钮监听事件builder.setPositiveButton("确定", new MyOnClickListener());builder.setNegativeButton("取消", new MyOnClickListener());//创建显示对话框(必须)builder.create().show();}//=======对话框的"确定"、"取消"按钮监听事件处理(查找时)============class MyOnClickListener implements android.content.DialogInterface.OnClickListener {public void onClick(DialogInterface dialog, int which) {switch(which) {case Dialog.BUTTON_POSITIVE ://将查到的这个联系人找到并显示在可视界面String strname = autotext.getText().toString();listview.setSelection(listCheck.indexOf(strname));break;case Dialog.BUTTON_NEGATIVE :System.out.println("按下取消");break;}}}//=================删除时弹出一个对话框================================private void dialogShow_dele() {//创建一个对话框AlertDialog.Builder builder = new Builder(this);//设置图标builder.setIcon(R.drawable.jiji);//设置标题builder.setTitle(" 对话框").setIcon(oren);//设置文本信息builder.setMessage(" 确定删除吗?").setIcon(R.drawable.jiji);//设置两个按钮,并设置按钮监听事件builder.setPositiveButton("确定", new My1OnClickListener());builder.setNegativeButton("取消", new My1OnClickListener());//创建显示对话框(必须)builder.create().show();}//===========对话框的"确定"、"取消"按钮监听事件处理(删除时)===============class My1OnClickListener implements android.content.DialogInterface.OnClickListener {public void onClick(DialogInterface dialog, int which) {switch(which) {case Dialog.BUTTON_POSITIVE :deleteItem(); //调用上面的删除数据库中对应数据的方法System.out.println("==============删除: " + LIST.get(CLICK_ID).get("name").toString());System.out.println("-------删除联系人--------------"+CLICK_ID);break;case Dialog.BUTTON_NEGATIVE :System.out.println("按下取消");break;}}}//===========================查询所有数据==============================================public ArrayList Query() {//------将更新后的全部数据返回---------//定义一个键值对数组将数据返回到第一个列表Activity中更新进行显示ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();DatabaseHelper dbHelper1 = new DatabaseHelper(Address_Book.this,"test_mars_db");SQLiteDatabase db1 = dbHelper1.getReadableDatabase();Cursor cursor = db1.query("user", new String[]{"name","phone","qq","mail","address"}, null, null, null, null, null);while(cursor.moveToNext()){HashMap<String, Object> map = new HashMap<String, Object>();map.put("name", cursor.getString(cursor.getColumnIndex("name")));map.put("phone", cursor.getString(cursor.getColumnIndex("phone")));map.put("qq", cursor.getString(cursor.getColumnIndex("qq")));map.put("mail", cursor.getString(cursor.getColumnIndex("mail")));map.put("address", cursor.getString(cursor.getColumnIndex("address")));listCheck.add(" " + cursor.getString(cursor.getColumnIndex("name")));//为了将所有人的名字保存数组中实现autoTextViewlist.add(map);}return list; //返回全部数据list用于列表显示}//===========================删除其中的一条数据===================================================public void deleteItem() {DatabaseHelper dbHelper1 = new DatabaseHelper(Address_Book.this,"test_mars_db");SQLiteDatabase db1 = dbHelper1.getReadableDatabase();db1.delete("user", "name=?", new String[]{LIST.get(CLICK_ID).get("name").toString()});System.out.println("||||||||||||||||||||删除"+LIST.get(CLICK_ID).get("name").toString()+" 成功");//删除联系人以后刷新联系人界面,跳转到当前界面,重新显示更新后的联系人列表Intent intent = new Intent();intent.setClass(Address_Book.this, Address_Book.class);startActivity(intent);}//================重写方法,添加快捷菜单,长按textView大于2秒就可以弹出快捷菜单=============================//在Activity中注册快捷菜单:registerForContextMenu(textView);@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {Toast.makeText(Address_Book.this, "你想对"+LIST.get(CLICK_ID).get("name").toString()+"干嘛^@^", 1).show();menu.add("拨号").getIcon();menu.add("发送短信息").setIcon(oren);menu.add("修改联系人").setIcon(R.drawable.jiji);menu.add("删除联系人").setIcon(oren);}//===================================快捷菜单监听事件===================================================@Overridepublic boolean onContextItemSelected(MenuItem item) {if(item.toString().equals("删除联系人")) {if(CLICK_ID != 600) {dialogShow_dele();} else {Toast.makeText(Address_Book.this, "请选择需要删除的联系人", 1).show();}} else if(item.toString().equals("修改联系人")) {if(CLICK_ID != 600) {System.out.println("************点击了修改联系人: " + LIST.get(CLICK_ID).get("name").toString());Intent intent = new Intent(); //跳转到编辑Activity,并发送编辑联系人标志("editpeople", 1)intent.setClass(Address_Book.this,Add_people.class);intent.putExtra("editpeople", 1); //根据这个参数(键值对)选择是否修改还是重新创建联系人startActivityForResult(intent, REQUESCODE1);} else {Toast.makeText(Address_Book.this, "请选择需要修改的联系人", 1).show();}}else if(item.toString().equals("拨号")) {if(CLICK_ID != 600) {Intent intent = new Intent();Uri uri ;String data ;data = "tel:"+LIST.get(CLICK_ID).get("phone").toString();uri = Uri.parse(data);intent.setAction(Intent.ACTION_CALL);intent.setData(uri);startActivity(intent);}else {Toast.makeText(Address_Book.this, "请选择一个号码", 1).show();}} else if(item.toString().equals("发送短信息")) {if(CLICK_ID != 600) {Intent intent = new Intent();intent.putExtra("phone_num", LIST.get(CLICK_ID).get("phone").toString()); //将选中的号码传过去intent.putExtra("name", LIST.get(CLICK_ID).get("name").toString()); //将选中的名字传过去intent.setClass(Address_Book.this, SendMessage.class);startActivityForResult(intent, 1);}else {Toast.makeText(Address_Book.this, "请选择一个号码", 1).show();}}return super.onContextItemSelected(item);}//====================下面的3个方法,读取手机上电话联系人Contact的信息并导入列表===============================//============读取手机上电话联系人Contact的信息(为了将所有联系人导入列表)============================public void getContactInformation() {//得到ContentResolver对象ContentResolver cr = getContentResolver();//取得电话本中开始一项的光标Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);while (cursor.moveToNext()){// 取得联系人名字int nameFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);String name = cursor.getString(nameFieldColumnIndex);// string += (name);// 取得联系人IDString contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));Cursor phone = cr.query(monDataKinds.Phone.CONTENT_URI, null, monDataKinds.Phone.CONTACT_ID + " = "+ contactId, null, null);// 取得电话号码(可能存在多个号码)while (phone.moveToNext()){String strPhoneNumber = phone.getString(phone.getColumnIndex(monDataKinds.Phone.NUMBER));// string += (":" + strPhoneNumber);/* System.out.println("$$$获得联系人名字:" + name);System.out.println("$$$获得联系人电话:" + strPhoneNumber);System.out.println("=========================================");*/String str = Query2(name); //先判断是否存在此人if(str == null) {insret_Contant(name,strPhoneNumber);System.out.println("============可以导入--------------");} else {System.out.println("==========已经存在此人-------------");}}// string += "\n";phone.close();}cursor.close();}。