需求概述
换手机,卡也要换,为将联系人导入新机下载了个App,使用时发现还要收费,我了个去,这点功能也收费,真当自己是高科技了.
So,自己动手丰衣足食.谁让自己是程序猿兼攻城狮呢.
流程设计
旧机读出联系人->存成文件->拷贝到电脑->拷贝到新机->导入联系人
代码实现
开发工具
- button点击读取所有联系人,显示在文本框中,并以固定格式存入Download目录
- button1从Download目录读取文本,解析,写入联系人
- 我的一个联系人下面最多两个电话号码,所以读号码只读两次
需要的权限
<uses-permissionandroid:name="android.permission.READ_CONTACTS" />
<uses-permissionandroid:name="android.permission.WRITE_CONTACTS" />
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE" />
完整代码
- using System;
- using Android.App;
- using Android.Content;
- using Android.Runtime;
- using Android.Views;
- using Android.Widget;
- using Android.OS;
- using Android.Provider;
- using System.Collections.Generic;
- using Android.Database;
- using System.IO;
- using Android;
- namespace App2.Droid
- {
- [Activity (Label = "App2.Android", MainLauncher = true, Icon = "@drawable/icon")]
- public class MainActivity : Activity
- {
- protected override void OnCreate (Bundle bundle)
- {
- base.OnCreate (bundle);
- // Set our view from the "main" layout resource
- SetContentView (Resource.Layout.Main);
- // Get our button from the layout resource,
- // and attach an event to it
- Button button = FindViewById<Button> (Resource.Id.myButton);
- button.Click += delegate {
- #region Read Contacts
- ICursor sqlQuery = ContentResolver.Query(ContactsContract.Contacts.ContentUri, null, null, null, null);
- string str = null;
- if (sqlQuery.MoveToFirst())
- {
- do
- {
- string contactId = sqlQuery.GetString(sqlQuery.GetColumnIndex(ContactsContract.Contacts.InterfaceConsts.Id));
- string displayName = sqlQuery.GetString(sqlQuery.GetColumnIndex(ContactsContract.Contacts.InterfaceConsts.DisplayName));
- str += "\r\ndisplayName:" + displayName;
- var sqlQuery2 = ContentResolver.Query(ContactsContract.CommonDataKinds.Phone.ContentUri, null, "contact_id=" + contactId, null, null);
- if (sqlQuery2.MoveToFirst())
- {
- string phoneNumber = sqlQuery2.GetString(sqlQuery2.GetColumnIndex(ContactsContract.CommonDataKinds.Phone.Number));
- str += "\tnum1:" + phoneNumber;
- //string str1 = null; //这段用于查看所有的列及值
- //foreach(var col in sqlQuery2.GetColumnNames())
- //{
- // str1 += "\r\n" + col + ":" + sqlQuery2.GetString(sqlQuery2.GetColumnIndex(col));
- //}
- }
- if (sqlQuery2.MoveToNext())
- {
- string phoneNumber = sqlQuery2.GetString(sqlQuery2.GetColumnIndex(ContactsContract.CommonDataKinds.Phone.Number));
- str += "\tnum2:" + phoneNumber;
- }
- }
- while (sqlQuery.MoveToNext());
- }
- #endregion
- var textView2 = FindViewById<EditText>(Resource.Id.editText1);
- textView2.Text = str;
- SaveText("contacts.txt", str);
- };
- Button button1 = FindViewById<Button>(Resource.Id.button1);
- button1.Click += Button1_Click;
- }
- private void Button1_Click(object sender, EventArgs e)
- {
- SaveContacts("contacts.txt");
- }
- public void SaveText(string filename, string text)
- {
- var documentsPath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads);
- //var p = System.Environment.GetFolderPath( System.Environment.SpecialFolder.Personal);
- var filePath = Path.Combine(documentsPath.AbsolutePath, filename);
- System.IO.File.WriteAllText(filePath, text);
- }
- public void SaveContacts(string filename)
- {
- var documentsPath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads);
- var filePath = Path.Combine(documentsPath.AbsolutePath, filename);
- var fileContent = File.ReadAllLines(filePath);
- List<ContentProviderOperation> ops = new List<ContentProviderOperation>();
- foreach (var strLine in fileContent)
- {
- if (string.IsNullOrEmpty(strLine))
- continue;
- var array = strLine.Split(new string[] { "\t", ":" }, StringSplitOptions.RemoveEmptyEntries);
- NewContact(ref ops, array[1], array[3], array.Length > 4 ? array[5] : null);
- //一次最多提交500条 每个联系人提交一次,多了会丢失名称
- //逐条提交,多个联系人提交也会有问题
- //if(ops.Count>200)
- //{
- //Add the new contact
- ContentProviderResult[] res;
- res = ContentResolver.ApplyBatch(ContactsContract.Authority, ops);
- ops.Clear();
- //}
- }
- }
- public void NewContact(ref List<ContentProviderOperation> ops, string displayName,string Number1,string Number2)
- {
- ContentProviderOperation.Builder builder =
- ContentProviderOperation.NewInsert(ContactsContract.RawContacts.ContentUri);
- builder.WithValue(ContactsContract.RawContacts.InterfaceConsts.AccountType, null);
- builder.WithValue(ContactsContract.RawContacts.InterfaceConsts.AccountName, null);
- ops.Add(builder.Build());
- //Name
- builder = ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri);
- builder.WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0);
- builder.WithValue(ContactsContract.Data.InterfaceConsts.Mimetype,
- ContactsContract.CommonDataKinds.StructuredName.ContentItemType);
- builder.WithValue(ContactsContract.CommonDataKinds.StructuredName.DisplayName, displayName);
- //builder.WithValue(ContactsContract.CommonDataKinds.StructuredName.GivenName, firstName);
- ops.Add(builder.Build());
- //Number1
- builder = ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri);
- builder.WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0);
- builder.WithValue(ContactsContract.Data.InterfaceConsts.Mimetype,
- ContactsContract.CommonDataKinds.Phone.ContentItemType);
- builder.WithValue(ContactsContract.CommonDataKinds.Phone.Number, Number1);
- builder.WithValue(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Type,
- ContactsContract.CommonDataKinds.Phone.InterfaceConsts.TypeCustom);
- builder.WithValue(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Data2, (int)PhoneDataKind.Mobile);
- ops.Add(builder.Build());
- //Number2
- if(!string.IsNullOrEmpty(Number2))
- {
- builder = ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri);
- builder.WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0);
- builder.WithValue(ContactsContract.Data.InterfaceConsts.Mimetype,
- ContactsContract.CommonDataKinds.Phone.ContentItemType);
- builder.WithValue(ContactsContract.CommonDataKinds.Phone.Number, Number2);
- builder.WithValue(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Type,
- ContactsContract.CommonDataKinds.Phone.InterfaceConsts.TypeCustom);
- builder.WithValue(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Data2, (int)PhoneDataKind.Mobile);
- ops.Add(builder.Build());
- }
- }
- }
- }
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Provider;
using System.Collections.Generic;
using Android.Database;
using System.IO;
using Android;
namespace App2.Droid
{
[Activity (Label = "App2.Android", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
// Get our button from the layout resource,
// and attach an event to it
Button button = FindViewById<Button> (Resource.Id.myButton);
button.Click += delegate {
#region Read Contacts
ICursor sqlQuery = ContentResolver.Query(ContactsContract.Contacts.ContentUri, null, null, null, null);
string str = null;
if (sqlQuery.MoveToFirst())
{
do
{
string contactId = sqlQuery.GetString(sqlQuery.GetColumnIndex(ContactsContract.Contacts.InterfaceConsts.Id));
string displayName = sqlQuery.GetString(sqlQuery.GetColumnIndex(ContactsContract.Contacts.InterfaceConsts.DisplayName));
str += "\r\ndisplayName:" + displayName;
var sqlQuery2 = ContentResolver.Query(ContactsContract.CommonDataKinds.Phone.ContentUri, null, "contact_id=" + contactId, null, null);
if (sqlQuery2.MoveToFirst())
{
string phoneNumber = sqlQuery2.GetString(sqlQuery2.GetColumnIndex(ContactsContract.CommonDataKinds.Phone.Number));
str += "\tnum1:" + phoneNumber;
//string str1 = null; //这段用于查看所有的列及值
//foreach(var col in sqlQuery2.GetColumnNames())
//{
// str1 += "\r\n" + col + ":" + sqlQuery2.GetString(sqlQuery2.GetColumnIndex(col));
//}
}
if (sqlQuery2.MoveToNext())
{
string phoneNumber = sqlQuery2.GetString(sqlQuery2.GetColumnIndex(ContactsContract.CommonDataKinds.Phone.Number));
str += "\tnum2:" + phoneNumber;
}
}
while (sqlQuery.MoveToNext());
}
#endregion
var textView2 = FindViewById<EditText>(Resource.Id.editText1);
textView2.Text = str;
SaveText("contacts.txt", str);
};
Button button1 = FindViewById<Button>(Resource.Id.button1);
button1.Click += Button1_Click;
}
private void Button1_Click(object sender, EventArgs e)
{
SaveContacts("contacts.txt");
}
public void SaveText(string filename, string text)
{
var documentsPath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads);
//var p = System.Environment.GetFolderPath( System.Environment.SpecialFolder.Personal);
var filePath = Path.Combine(documentsPath.AbsolutePath, filename);
System.IO.File.WriteAllText(filePath, text);
}
public void SaveContacts(string filename)
{
var documentsPath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads);
var filePath = Path.Combine(documentsPath.AbsolutePath, filename);
var fileContent = File.ReadAllLines(filePath);
List<ContentProviderOperation> ops = new List<ContentProviderOperation>();
foreach (var strLine in fileContent)
{
if (string.IsNullOrEmpty(strLine))
continue;
var array = strLine.Split(new string[] { "\t", ":" }, StringSplitOptions.RemoveEmptyEntries);
NewContact(ref ops, array[1], array[3], array.Length > 4 ? array[5] : null);
//一次最多提交500条 每个联系人提交一次,多了会丢失名称
//逐条提交,多个联系人提交也会有问题
//if(ops.Count>200)
//{
//Add the new contact
ContentProviderResult[] res;
res = ContentResolver.ApplyBatch(ContactsContract.Authority, ops);
ops.Clear();
//}
}
}
public void NewContact(ref List<ContentProviderOperation> ops, string displayName,string Number1,string Number2)
{
ContentProviderOperation.Builder builder =
ContentProviderOperation.NewInsert(ContactsContract.RawContacts.ContentUri);
builder.WithValue(ContactsContract.RawContacts.InterfaceConsts.AccountType, null);
builder.WithValue(ContactsContract.RawContacts.InterfaceConsts.AccountName, null);
ops.Add(builder.Build());
//Name
builder = ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri);
builder.WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0);
builder.WithValue(ContactsContract.Data.InterfaceConsts.Mimetype,
ContactsContract.CommonDataKinds.StructuredName.ContentItemType);
builder.WithValue(ContactsContract.CommonDataKinds.StructuredName.DisplayName, displayName);
//builder.WithValue(ContactsContract.CommonDataKinds.StructuredName.GivenName, firstName);
ops.Add(builder.Build());
//Number1
builder = ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri);
builder.WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0);
builder.WithValue(ContactsContract.Data.InterfaceConsts.Mimetype,
ContactsContract.CommonDataKinds.Phone.ContentItemType);
builder.WithValue(ContactsContract.CommonDataKinds.Phone.Number, Number1);
builder.WithValue(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Type,
ContactsContract.CommonDataKinds.Phone.InterfaceConsts.TypeCustom);
builder.WithValue(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Data2, (int)PhoneDataKind.Mobile);
ops.Add(builder.Build());
//Number2
if(!string.IsNullOrEmpty(Number2))
{
builder = ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri);
builder.WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0);
builder.WithValue(ContactsContract.Data.InterfaceConsts.Mimetype,
ContactsContract.CommonDataKinds.Phone.ContentItemType);
builder.WithValue(ContactsContract.CommonDataKinds.Phone.Number, Number2);
builder.WithValue(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Type,
ContactsContract.CommonDataKinds.Phone.InterfaceConsts.TypeCustom);
builder.WithValue(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Data2, (int)PhoneDataKind.Mobile);
ops.Add(builder.Build());
}
}
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /><uses-permission android:name="android.permission.READ_FRAME_BUFFER" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
http://blog.csdn.net/wangshiwei1105/article/details/76228397