Create Android App Contact Picker and Send SMS
Let’s start,
Step 1: Open Visual Studio->New Project->Templates->Visual C#->Android, then Select Blank App. Then give Project Name and Project Location.

Step 2: Next go to Solution Explorer-> Project Name-> Components then Right Click to Get More Components then open new Dialog box. This dialog box to search the Xamarin.Mobile then Click Add App.

Step 3: Next to Open Solution Explorer->Project Name->Properties->AndroidManifest.xml Open the Xml page then give permission for READ_CONTACTS and SEND_SMS.

Step 4: Next to Open Solution Explorer->Project Name->Resources->layout, then Main.axml Click Open Design View and give the following code.
AXML Code:-
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/lellayout" android:background="#3E4095"> <RelativeLayout android:orientation="horizontal" android:layout_width="match_parent" android:id="@+id/linearLayout3" android:layout_height="wrap_content"> <TextView android:text="TO" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView1" android:gravity="top" android:paddingTop="20dp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:id="@+id/txtmobilenum" android:layout_marginLeft="20dp" android:layout_marginRight="35dp" /> <Button android:background="@drawable/addusergroup_48" android:layout_width="42.7dp" android:layout_alignParentRight="true" android:layout_height="wrap_content" android:id="@+id/btncontact" android:layout_marginLeft="20dp" android:layout_marginRight="2dp" /> </RelativeLayout> <LinearLayout android:orientation="vertical" android:minWidth="25px" android:minHeight="25px" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/linearLayout3" android:id="@+id/linearLayout6"> <EditText android:inputType="textMultiLine" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/txtbodymsg" /> </LinearLayout> <LinearLayout android:orientation="vertical" android:minWidth="25px" android:minHeight="25px" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/linearLayout6" android:id="@+id/linearLayout7"> <TableLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_below="@id/linearLayout3" android:stretchColumns="*" android:layout_height="wrap_content" android:id="@+id/linearLayout5"> <TableRow android:minWidth="25px" android:minHeight="25px" android:layout_width="wrap_content" android:layout_height="match_parent" android:id="@+id/tableRow1"> <Button android:text="Send" android:layout_width="wrap_content" android:layout_height="46.0dp" android:id="@+id/btnsmssend" android:layout_column="2" /> </TableRow> </TableLayout> </LinearLayout> </RelativeLayout>
Step 5: Next to Open Solution Explorer-> Project Name->MainActivity.cs.open c# Code Window. First give name space for using System.Linq;
Step 6: Next to declare Button and EditText Events and following to create Button Click Events.
C# Code:-
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using System.Linq;
namespace SMS
{
[Activity(Label = "SMS", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity: Activity
{
Button btncontact;
Button btnsmssend;
EditText txtmobilenum;
EditText txtbodymsg;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
txtbodymsg = FindViewById < EditText > (Resource.Id.txtbodymsg);
txtmobilenum = FindViewById < EditText > (Resource.Id.txtmobilenum);
btncontact = FindViewById < Button > (Resource.Id.btncontact);
btnsmssend = FindViewById < Button > (Resource.Id.btnsmssend);
btncontact.Click += Btncontact_Click;
btnsmssend.Click += Btnsmssend_Click;
}
}
}
Step 7: Next to Pick the Contact Number in Contact List.so here create Contact Picker Button Click Event and then its passing Intent Value in OnActivityResult().
private void Btncontact_Click(object sender, EventArgs e)
{
var contactPickerIntent = new Intent(Intent.ActionPick,
Android.Provider.ContactsContract.Contacts.ContentUri);
StartActivityForResult(contactPickerIntent, 101);
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
if (requestCode == 101 && resultCode == Result.Ok)
{
//Ensure we have data returned
if (data == null || data.Data == null)
return;
var addressBook = new Xamarin.Contacts.AddressBook(this);
addressBook.PreferContactAggregation = false;
//Load the contact via the android contact id
// in the last segment of the Uri returned by the
// android contact picker
var contact = addressBook.Load(data.Data.LastPathSegment);
//Use linq to find a mobile number
var mobile = (from p in contact.Phones
where
p.Type == Xamarin.Contacts.PhoneType.Mobile
select p.Number).FirstOrDefault();
//See if the contact has a mobile number
if (string.IsNullOrEmpty(mobile))
{
Toast.MakeText(this, "No Mobile Number for contact!",
ToastLength.Short).Show();
return;
}
txtmobilenum.Text = mobile;
}
}
Step 8: Finally we Send the sms on given selected Number so here to create Send Button Event.
C# code:–
private void Btnsmssend_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(txtbodymsg.Text))
{
Toast.MakeText(this, "SMS Text Body Is Empty", ToastLength.Long).Show();
}
else if (string.IsNullOrWhiteSpace(txtmobilenum.Text))
{
Toast.MakeText(this, "Enter Mobile Number", ToastLength.Long).Show();
}
else
{
Toast.MakeText(this, "Sending SMS... Please wait...", ToastLength.Short).Show();
//Send SMS!
var smsMgr = Android.Telephony.SmsManager.Default;
smsMgr.SendTextMessage(txtmobilenum.Text, null, txtbodymsg.Text, null, null);
Toast.MakeText(this, "SMS successfully sent", ToastLength.Short).Show();
txtbodymsg.Text = "";
txtmobilenum.Text = "";
}
}
catch (Exception ex)
{
Toast.MakeText(this, ex.ToString(), ToastLength.Short).Show();
}
}


Anbu Mani(Microsoft MVP) is working Software Engineer in Changepond Technologies, Chennai, Tamilnadu, India. Having 4+ years of experience and his area of interest is C#, ASP.NET, SQL Server, Xamarin and Xamarin Forms,Azure…etc
