Xamarin.Forms                
            Kontaktauswahl - Xamarin-Formulare (Android und iOS)
        
        
            
    Suche…
Bemerkungen
Contact Picker XF (Android und iOS)
contact_picker.cs
using System;
using Xamarin.Forms;
namespace contact_picker
{
    public class App : Application
    {
        public App ()
        {
            // The root page of your application
            MainPage = new MyPage();
        }
        protected override void OnStart ()
        {
            // Handle when your app starts
        }
        protected override void OnSleep ()
        {
            // Handle when your app sleeps
        }
        protected override void OnResume ()
        {
            // Handle when your app resumes
        }
    }
}
MyPage.cs
using System;
using Xamarin.Forms;
namespace contact_picker
{
    public class MyPage : ContentPage
    {
        Button button;
        public MyPage ()
        {
            button = new Button {
                Text = "choose contact"
            };
            button.Clicked += async (object sender, EventArgs e) => {
                
                    if (Device.OS == TargetPlatform.iOS) {
                        await Navigation.PushModalAsync (new ChooseContactPage ());
                        }
                    else if (Device.OS == TargetPlatform.Android)
                    {
                        MessagingCenter.Send (this, "android_choose_contact", "number1");
                    }
            };
            Content = new StackLayout { 
                Children = {
                    new Label { Text = "Hello ContentPage" },
                    button
                }
            };
        }
        protected override void OnSizeAllocated (double width, double height)
        {
            base.OnSizeAllocated (width, height);
            MessagingCenter.Subscribe<MyPage, string> (this, "num_select", (sender, arg) => {
                DisplayAlert ("contact", arg, "OK");
            });
                
        }
    }
}
Wählen SieContactPicker.cs
using System;
using Xamarin.Forms;
namespace contact_picker
{
    public class ChooseContactPage : ContentPage
    {
        public ChooseContactPage ()
        {
            
        }
    }
}
Wählen SieContactActivity.cs
using Android.App;
using Android.OS;
using Android.Content;
using Android.Database;
using Xamarin.Forms;
namespace contact_picker.Droid
{
    [Activity (Label = "ChooseContactActivity")]
    public class ChooseContactActivity : Activity 
    {
        public string type_number = "";
        protected override void OnCreate (Bundle savedInstanceState)
        {
            base.OnCreate (savedInstanceState);
            Intent intent = new Intent(Intent.ActionPick, Android.Provider.ContactsContract.CommonDataKinds.Phone.ContentUri);
            StartActivityForResult(intent, 1);
        }
        protected override void OnActivityResult (int requestCode, Result resultCode, Intent data)
        {
            // TODO Auto-generated method stub
            base.OnActivityResult (requestCode, resultCode, data);
            if (requestCode == 1) {
                if (resultCode == Result.Ok) {
                    Android.Net.Uri contactData = data.Data;
                    ICursor cursor = ContentResolver.Query(contactData, null, null, null, null);
                    cursor.MoveToFirst();
                    string number = cursor.GetString(cursor.GetColumnIndexOrThrow(Android.Provider.ContactsContract.CommonDataKinds.Phone.Number));
                    var twopage_renderer = new MyPage();
                    MessagingCenter.Send<MyPage, string> (twopage_renderer, "num_select", number);
                    Finish ();
                    Xamarin.Forms.Application.Current.MainPage.Navigation.PopModalAsync ();
                }
                else if (resultCode == Result.Canceled)
                {
                    Finish ();               
                }
            }
        }
    }
}
MainActivity.cs
using System;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Xamarin.Forms;
namespace contact_picker.Droid
{
    [Activity (Label = "contact_picker.Droid", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
    {
        protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);
            global::Xamarin.Forms.Forms.Init (this, bundle);
            LoadApplication (new App ());
            MessagingCenter.Subscribe<MyPage, string>(this, "android_choose_contact", (sender, args) => {
                Intent i = new Intent (Android.App.Application.Context, typeof(ChooseContactActivity));
                i.PutExtra ("number1", args);
                StartActivity (i);
            });
        }
    }
}
Wählen SieContactRenderer.cs
using UIKit;
using AddressBookUI;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using contact_picker;
using contact_picker.iOS;
[assembly: ExportRenderer (typeof(ChooseContactPage), typeof(ChooseContactRenderer))]
namespace contact_picker.iOS
{
    public partial class ChooseContactRenderer : PageRenderer
    {
        ABPeoplePickerNavigationController _contactController;
        public string type_number;
        protected override void OnElementChanged (VisualElementChangedEventArgs e)
        {
            base.OnElementChanged (e);
            var page = e.NewElement as ChooseContactPage;
            if (e.OldElement != null || Element == null) {
                return;
            }
        }
        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();
            _contactController = new ABPeoplePickerNavigationController ();
            this.PresentModalViewController (_contactController, true); //display contact chooser
            _contactController.Cancelled += delegate {
                Xamarin.Forms.Application.Current.MainPage.Navigation.PopModalAsync ();
                this.DismissModalViewController (true); };
            _contactController.SelectPerson2 += delegate(object sender, ABPeoplePickerSelectPerson2EventArgs e) {
                var getphones = e.Person.GetPhones();
                string number = "";
                if (getphones == null)
                {
                    number = "Nothing";
                }
                else if (getphones.Count > 1)
                {
                    //il ya plus de 2 num de telephone
                    foreach(var t in getphones)
                    {
                        number = t.Value + "/" + number;
                    }
                }
                else if (getphones.Count == 1)
                {
                    //il ya 1 num de telephone
                    foreach(var t in getphones)
                    {
                        number = t.Value;
                    }
                }
                Xamarin.Forms.Application.Current.MainPage.Navigation.PopModalAsync ();
                var twopage_renderer = new MyPage();
                MessagingCenter.Send<MyPage, string> (twopage_renderer, "num_select", number);
                this.DismissModalViewController (true);
            };
        }
        public override void ViewDidUnload ()
        {
            base.ViewDidUnload ();
            // Clear any references to subviews of the main view in order to
            // allow the Garbage Collector to collect them sooner.
            //
            // e.g. myOutlet.Dispose (); myOutlet = null;
            this.DismissModalViewController (true);
        }
        public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
        {
            // Return true for supported orientations
            return (toInterfaceOrientation != UIInterfaceOrientation.PortraitUpsideDown);
        }
    }
}
Modified text is an extract of the original Stack Overflow Documentation
        Lizenziert unter CC BY-SA 3.0
        Nicht angeschlossen an Stack Overflow