利用安卓实现安卓应用app⼿机联系⼈和电话⽇志管理的导⼊导出联系⼈信息
时间: 2024-02-01 12:12:27 浏览: 55
要实现安卓应用程序中的联系人和通话记录的导入和导出,可以按照以下步骤进行操作:
1. 添加权限
在AndroidManifest.xml文件中添加以下权限:
```
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
2. 读取联系人
使用ContentResolver类获取联系人的信息,具体代码如下:
```
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor phoneCursor = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[]{id}, null);
while (phoneCursor.moveToNext()) {
String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
phoneCursor.close();
}
}
cursor.close();
```
3. 写入联系人
使用ContentValues类将联系人信息写入到系统联系人数据库中,具体代码如下:
```
ContentValues values = new ContentValues();
values.put(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, "联系人姓名");
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "联系人电话号码");
Uri uri = getContentResolver().insert(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, values);
```
4. 读取通话记录
使用ContentResolver类获取通话记录的信息,具体代码如下:
```
Cursor cursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext()) {
String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));
String type = cursor.getString(cursor.getColumnIndex(CallLog.Calls.TYPE));
String date = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DATE));
String duration = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DURATION));
}
cursor.close();
```
5. 写入通话记录
使用ContentValues类将通话记录信息写入到系统通话记录数据库中,具体代码如下:
```
ContentValues values = new ContentValues();
values.put(CallLog.Calls.NUMBER, "联系人电话号码");
values.put(CallLog.Calls.CACHED_NAME, "联系人姓名");
values.put(CallLog.Calls.TYPE, CallLog.Calls.OUTGOING_TYPE);//通话类型:呼入CallLog.Calls.INCOMING_TYPE 呼出CallLog.Calls.OUTGOING_TYPE 未接CallLog.Calls.MISSED_TYPE
values.put(CallLog.Calls.DATE, System.currentTimeMillis());
values.put(CallLog.Calls.DURATION, "通话时长(秒)");
Uri uri = getContentResolver().insert(CallLog.Calls.CONTENT_URI, values);
```
6. 导入导出联系人和通话记录信息
将联系人和通话记录信息导出到文件中,可以使用FileOutputStream类将数据写入到文件中,具体代码如下:
```
File file = new File(Environment.getExternalStorageDirectory(), "contacts.txt");
FileOutputStream fos = new FileOutputStream(file);
fos.write(sb.toString().getBytes());
fos.close();
```
从文件中读取联系人和通话记录信息,可以使用FileInputStream类读取文件数据,具体代码如下:
```
File file = new File(Environment.getExternalStorageDirectory(), "contacts.txt");
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
String str = new String(buffer);
```
注意:在使用文件读写操作时,需要添加读写文件的权限。