需求概述
换手机,卡也要换,为将联系人导入新机下载了个App,使用时发现还要收费,我了个去,这点功能也收费,真当自己是高科技了.
So,自己动手丰衣足食.谁让自己是程序猿兼攻城狮呢.
流程设计
旧机读出联系人->存成文件->拷贝到电脑->拷贝到新机->导入联系人
代码实现
开发工具
Visual Studio 2017 Xamarin Android原生项目
button点击读取所有联系人,显示在文本框中,并以固定格式存入Download目录
button1从Download目录读取文本,解析,写入联系人
我的一个联系人下面最多两个电话号码,所以读号码只读两次
需要的权限
完整代码
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);
SetContentView (Resource.Layout.Main);
Button button = FindViewById (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;
}
if (sqlQuery2.MoveToNext())
{
string phoneNumber = sqlQuery2.GetString(sqlQuery2.GetColumnIndex(ContactsContract.CommonDataKinds.Phone.Number));
str += "\tnum2:" + phoneNumber;
}
}
while (sqlQuery.MoveToNext());
}
#endregion
var textView2 = FindViewById(Resource.Id.editText1);
textView2.Text = str;
SaveText("contacts.txt" , str);
};
Button button1 = FindViewById(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 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 ops = new List();
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 );
ContentProviderResult[] res;
res = ContentResolver.ApplyBatch(ContactsContract.Authority, ops);
ops.Clear();
}
}
public void NewContact( ref List 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());
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);
ops.Add(builder.Build());
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());
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 (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(Resource.Id.editText1);
textView2.Text = str;
SaveText("contacts.txt", str);
};
Button button1 = FindViewById(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 ops = new List();
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 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());
}
}
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
android:name = "android.permission.MODIFY_AUDIO_SETTINGS" /> android:name = "android.permission.READ_FRAME_BUFFER" /> android:name = "android.permission.ACCESS_NETWORK_STATE" /> android:name = "android.permission.WRITE_EXTERNAL_STORAGE" />
http://blog.csdn.net/wangshiwei1105/article/details/76228397