本项目提供了一种便捷的方法来实现安卓设备上通讯录数据的备份及恢复功能,通过编写相关代码可以有效地帮助用户防止数据丢失。
最近想尝试编写一些Android程序来玩一玩。开发环境使用Eclipse, 并搭建了基于Android 2.2的开发环境。
1. 首先安装JDK。
2. 下载并安装Eclipse。
3. 下载和安装Android SDK。
4. 安装适用于Eclipse的ADT插件(Android Development Tools)。
5. 在Window > Preferences中配置Android SDK路径。
6. 创建AVD(模拟器设备)。
实现方法很简单:
1. 将通讯录中的联系人及电话号码保存到txt文件,以完成备份工作;
2. 从txt文件读取数据并将其导入到手机的通讯录中,以此来恢复之前的数据。
具体代码示例如下:
- 添加权限:在AndroidManifest.xml 文件中添加以下内容。
```xml
```
- 写文件代码:
```java
File saveFile = new File(/sdcard/test.txt);
FileOutputStream outStream;
try {
outStream = new FileOutputStream(saveFile);
outStream.write(str.getBytes());
outStream.close();
} catch (Exception e) {
setTitle(e.toString());
}
```
- 取通讯录联系人:
```java
str=;
Cursor cur = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if(cur.moveToFirst()){
int idColumn = cur.getColumnIndex(ContactsContract.Contacts._ID);
int displayNameColumn = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
do{
String contactId = cur.getString(idColumn);
String disPlayName = cur.getString(displayNameColumn);
str+=disPlayName;
int phoneCount = cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if(phoneCount>0){
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + = + contactId, null, null);
int i=0;
String phoneNumber;
if(phones.moveToFirst()){
do{
i++;
phoneNumber= phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
if(i==1) str=str+,+phoneNumber;
System.out.println(phoneNumber);
}while (phones.moveToNext());
}
}
str+=\r\n;
} while(cur.moveToNext());
}
```
- 读取文件代码:
```java
try {
File file = new File(/sdcard/test.txt);
FileInputStream inStream = new FileInputStream(file);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024*5];
int length;
while((length=inStream.read(buffer)) != -1){
outStream.write(buffer, 0, length);
}
outStream.close(); inStream.close();
String txt= outStream.toString();
} catch (IOException e) {
setTitle(e.toString());
}
```
- 写入通讯录代码:
```java
ContentValues values = new ContentValues();
Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
values.put(StructuredName.GIVEN_NAME, name);
getContentResolver().insert(Data.CONTENT_URI, values);
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.NUMBER, num);
values.put(Phone.TYPE, Phone.TYPE_HOME);
getContentResolver().insert(Data.CONTENT_URI, values);
```
如果有任何不合理的部分或需要改进的地方,欢迎通过邮件进行交流。