编写Android程序实现手机通讯簿导入

原创文档,转载请保留原文url地址

介绍

新购买了android手机,感觉很好, 新问题也来了, 如何把iphone手机中通讯簿导入到 android中。

在百度中搜索,有几个软件可以完成这个功能。 大家可以去百度搜索。

最近在学习android的开发, 因此考虑通过程序来实现这个功能。

下面介绍根据网络上教程来实现android手机通讯薄访问教程

参考教程

http://pan.baidu.com/s/189GI8

建议大家先看一遍教程有一遍初步的了解, 然后创建一个android项目, 然后依照教程中的信息,将代码一一敲入, 然后启动模拟器调试程序, 最后接入android真机测试相关程序.

视频中, 请密切注意如何介绍的发现通讯录的存储方式,通过导入sqlite数据库, 了解源代码,分析相关android代码,得到通讯录的读写方法,这个研究方法是以后编写android代码必须的手段。另外其他通讯录的读写api也可以参考

程序实现中需要android的ContentProvider等相关知识等, 大家可以参考:

http://pan.baidu.com/s/1AB92B

相关情况如下:

1. 创建android项目

wps_clip_image-14982_thumb[1][1]

2. 编写项目源代码

根据相关视频介绍, 编写相关源代码

项目创建完成后项目结构如下:

wps_clip_image-22792_thumb[1][1]

3. 项目源文件

AndroidManifest.xml文件, 通过在文件中添加main类, 以及相关应用程序的权限

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="cn.iigrowing.android.input.contact.activity"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk android:minSdkVersion="7" />

<application

android:icon="@drawable/icon"

android:label="@string/app_name" >

<activity

android:label="@string/app_name"

android:name="cn.iigrowing.android.input.contact.activity.SaveActivity" >

<intent-filter >

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

<!--  互联网访问权限 -->

<uses-permission android:name="android.permission.INTERNET" />

<!--  通讯录读权限 -->

<uses-permission android:name="android.permission.READ_CONTACTS" />

<!--  通讯录写权限 -->

<uses-permission android:name="android.permission.WRITE_CONTACTS" />

</manifest>

SaveActivity.java 类

package cn.iigrowing.android.input.contact.activity;

import java.util.ArrayList;

import android.app.Activity;

import android.content.ContentProviderOperation;

import android.content.ContentResolver;

import android.content.ContentUris;

import android.content.ContentValues;

import android.content.OperationApplicationException;

import android.database.Cursor;

import android.net.Uri;

import android.os.Bundle;

import android.os.RemoteException;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

public class SaveActivity extends Activity {

private Button btnAdd;  

private Button btnBtAdd;

private Button btnShow;

private EditText editEmail;

private EditText editName;

private EditText editTel;

private TextView txtResult;

// 事件处理程序

private OnClickListener listener = new OnClickListener() {

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btnAdd:

String name = editName.getText().toString();

String tel = editTel.getText().toString();

String email = editEmail.getText().toString();

AddContact(name, tel, email);

break;

case R.id.btnBtAdd:

name = editName.getText().toString();

tel = editTel.getText().toString();

email = editEmail.getText().toString();

BtAddContact(name, tel, email);

break;

case R.id.btnShow:

ShowContacts();

break;

}

}

};

// 将用户名, 电话号码, email信息添加到 通讯薄中

public void AddContact(String name, String tel, String email) {

Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");

ContentResolver resolver = this.getContentResolver();

ContentValues values = new ContentValues();

long contactid = ContentUris.parseId(resolver.insert(uri, values));

// 添加姓名

uri = Uri.parse("content://com.android.contacts/data");

values.put("raw_contact_id", contactid);

values.put("mimetype", "vnd.android.cursor.item/name");

values.put("data2", name);

resolver.insert(uri, values);

// 添加电话

values.clear();

values.put("raw_contact_id", contactid);

values.put("mimetype", "vnd.android.cursor.item/phone_v2");

values.put("data2", "2");

values.put("data1", tel);

resolver.insert(uri, values);

// add email

values.clear();

values.put("raw_contact_id", contactid);

values.put("mimetype", "vnd.android.cursor.item/email_v2");

values.put("data2", "2");

values.put("data1", email);

resolver.insert(uri, values);

}

// 通过批量处理的办法将用户信息等,添加到通讯薄中

// 这个批处理中, 若是某个操作有问题,则整个取消,类似事物的概念, 只是根据教程的介绍, 没有测试过

public void BtAddContact(String name, String tel, String email) {

Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");

ContentResolver resolver = this.getContentResolver();

ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();

ContentProviderOperation op1 = ContentProviderOperation.newInsert(uri)

.withValue("account_name", null).build();

operations.add(op1);

uri = Uri.parse("content://com.android.contacts/data");

ContentProviderOperation op2 = ContentProviderOperation.newInsert(uri)

.withValueBackReference("raw_contact_id", 0)

.withValue("mimetype", "vnd.android.cursor.item/name")

.withValue("data2", name).build();

operations.add(op2);

ContentProviderOperation op3 = ContentProviderOperation.newInsert(uri)

.withValueBackReference("raw_contact_id", 0)

.withValue("mimetype", "vnd.android.cursor.item/phone_v2")

.withValue("data1", tel).withValue("data2", "2").build();

operations.add(op3);

ContentProviderOperation op4 = ContentProviderOperation.newInsert(uri)

.withValueBackReference("raw_contact_id", 0)

.withValue("mimetype", "vnd.android.cursor.item/email_v2")

.withValue("data1", email).withValue("data2", "2").build();

operations.add(op4);

try {

resolver.applyBatch("com.android.contacts", operations);

} catch (RemoteException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (OperationApplicationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.save);

btnAdd = (Button) findViewById(R.id.btnAdd);

btnShow = (Button) findViewById(R.id.btnShow);

btnBtAdd = (Button) findViewById(R.id.btnBtAdd);

editName = (EditText) findViewById(R.id.editName);

editTel = (EditText) findViewById(R.id.editTel);

editEmail = (EditText) findViewById(R.id.editEmail);

txtResult = (TextView) findViewById(R.id.txtResult);

btnAdd.setOnClickListener(listener);

btnShow.setOnClickListener(listener);

btnBtAdd.setOnClickListener(listener);

}

// 显示联系人列表

public void ShowContacts() {

Uri uri = Uri.parse("content://com.android.contacts/contacts");

ContentResolver resolver = this.getContentResolver();

Cursor cursor = resolver.query(uri, new String[] { "_id" }, null, null,

null);

StringBuilder sb = new StringBuilder("contactid=");

while (cursor.moveToNext()) {

int contactid = cursor.getInt(0);

sb.append(contactid);

uri = Uri.parse("content://com.android.contacts/contacts/"

+ contactid + "/data");

Cursor datacursor = resolver.query(uri, new String[] { "mimetype",

"data1", "data2" }, null, null, null);

while (datacursor.moveToNext()) {

String data = datacursor.getString(datacursor

.getColumnIndex("data1"));

String type = datacursor.getString(datacursor

.getColumnIndex("mimetype"));

if ("vnd.android.cursor.item/name".equals(type)) {

sb.append(",name=" + data);

} else if (("vnd.android.cursor.item/email_v2").equals(type)) {

sb.append(",email=" + data);

} else if (("vnd.android.cursor.item/phone_v2").equals(type)) {

sb.append(",phone=" + data);

}

}

Log.i("aaa", sb.toString());

sb.append("\r\n");

}

txtResult.setText(sb.toString());

}

}

Save.xml 布局文件

<?xml version="1.0" encoding="utf-8"?>

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<TableRow>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:text="姓名:"

android:textSize="20sp"

android:textStyle="bold" />

<EditText

android:id="@+id/editName"

android:layout_width="200dp"

android:layout_height="wrap_content"

android:text="www.iigrowing.cn" />

</TableRow>

<TableRow>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:text="电话:"

android:textSize="20sp"

android:textStyle="bold" />

<EditText

android:id="@+id/editTel"

android:layout_width="200dp"

android:layout_height="wrap_content"

android:text="13661168171" />

</TableRow>

<TableRow>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:text="email:"

android:textSize="20sp"

android:textStyle="bold" />

<EditText

android:id="@+id/editEmail"

android:layout_width="200dp"

android:layout_height="wrap_content"

android:text="iig001@qq.com" />

</TableRow>

<Button

android:id="@+id/btnAdd"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="单步添加" />

<Button

android:id="@+id/btnShow"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="显示列表" />

<Button

android:id="@+id/btnBtAdd"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="事务添加" />

<TextView

android:id="@+id/txtResult"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_weight="0.68"

android:textSize="20sp"

android:textStyle="bold" />

</TableLayout>

4. 启动模拟器进行相关测试

wps_clip_image-10305_thumb[1][1]

如上图1,点击按钮启动虚拟机管理器, 点击2处按钮启动虚拟器, 选择图中3处选项, 最后选择4处按钮,启动相关模拟器。

5. 模拟器部署应用程序

wps_clip_image-27652_thumb[1][1]

如上图,请在1处(必须是项目名称上)选择右键,在弹出的菜单上选择run as菜单, 然选择 android application按钮

wps_clip_image-14179_thumb[1][1]

程序运行后界面如上图, 点击单步添加按钮

wps_clip_image-20613_thumb[1][1]

点击图中按钮切换到主屏

wps_clip_image-5589_thumb[1][1]

按上图中按钮

wps_clip_image-19569_thumb[1][1]

选择上图中联系人标签

wps_clip_image-10984_thumb[1][1]

显示刚刚添加的信息

6. 设置断点,调试应用程序

wps_clip_image-1749_thumb[1][1]

如上图, 在文件中设置断点

然后参照下图

wps_clip_image-14985_thumb[1][1]

在1处,点击右键, 选择2处按钮, 最后选择启动android application

然后选择 添加按钮wps_clip_image-773_thumb[1][1]

若是出现下面对话框,选择如下选项, 然后选择yes按钮

wps_clip_image-28170_thumb[1][1]

wps_clip_image-18947_thumb[1][1]

如上图, 进入了调试模式,在图中1处, 程序中断运行, 图中2区域堆栈信息, 图中3处显示变量信息, 图中4中显示控制台信息, 图中5处显示android的日志信息

7. 调试设备

插入android手机,部署程序, 在弹出的对话框中, 选择手机设备。

在使用手机设备时, 请确保手机的设备驱动程序被完好安装完成, 同时在手机的选项中,将开发人员选项打开到调试模式。

当需要调试设备时,首先保证上面操作完成, 然后通过usb线连接手机到开发机中, 然后在eclipse中选择运行或者调试,然后选择相应设备。最后运行。

参考项目如下:

http://pan.baidu.com/s/1pCR1L

后续, 添加如何从iphone中导出通讯录到android手机中的具体步骤。

发表评论