如何使用电话联系人填充Spinner

时间:2015-07-31 12:04:32

标签: c# android xamarin spinner contacts

我正在尝试使用Xamarin Studio为Android开发应用程序。 我的应用程序包括它的自定义短信发送功能。我遵循了here的说明。我的应用程序将短信的文本存储在我可以使用SmsManager发送的字符串中,但仅当我在代码中指明收件人编号时才会这样。

我可以创建一个editText字段,用户可以在其中输入数字,我的应用程序将解析输入以将短信发送到指定的数字。但我希望用户能够轻松地做到这一点。所以我想添加一个Spinner并用来自用户手机的联系人填充它。那我该怎么做呢?

当用户点击Spinner时,他们会获得联系人的下拉列表,他们可以选择要将短信发送给谁。然后,当他们点击“发送”按钮时,应用程序将解析Spinner当前所选联系人的号码,并将我的短信发送到该号码。

如果可能,您能举例说明如何以编程方式完成此操作吗?

提前谢谢。

编辑: 我试过跟随this article来阅读联系人,但我遇到了两个问题:

  1. 这些联系人将在哪里存储在我的应用中?它们会列在textView中吗?

  2. 我无法使用此代码运行我的应用。

  3. 这就是我所做的:我打开了Xamarin Studio。开始了一个新项目。如您所知,当您在Xamarin中启动一个新项目时,它会自动创建一个简单的应用程序,其中只有一个按钮,可以计算单击它的次数。我没有删除这个按钮和它的代码,因为这真的不应该干扰任何事情。然后我继续复制粘贴我之前提到的文章中的代码。所以这就是我的代码现在的样子:

    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;
    
    namespace tabletApp
    {
        [Activity (Label = "tabletApp", MainLauncher = true, Icon =     "@drawable/icon")]
        public class MainActivity : ListActivity
        {
            int count = 1;
    
            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
                var uri = ContactsContract.Contacts.ContentUri;
    
                string[] projection = {     ContactsContract.Contacts.InterfaceConsts.Id,
                    ContactsContract.Contacts.InterfaceConsts.DisplayName };
    
                var cursor = ManagedQuery (uri, projection, null, null, null);
    
                var contactList = new List<string> ();
    
                if (cursor.MoveToFirst ()) {
                    do {
                        contactList.Add (cursor.GetString (
                            cursor.GetColumnIndex (projection [1])));
                    }  while (cursor.MoveToNext());
                }
    
                ListAdapter = new ArrayAdapter<string> (this,
                    Resource.Layout.ContactItemView, contactList);
    
                Button button = FindViewById<Button> (Resource.Id.myButton);
    
                button.Click += delegate {
                    button.Text = string.Format ("{0} clicks!", count++);
                };
            }
        }
    }
    

    当我构建它时,它会给我一个警告

    var cursor = ManagedQuery (uri, projection, null, null, null);
    

    说:

      

    'Android.App.Activity.ManagedQuery(Android.Net.Uri,string [],string,string [],string)'已过时:'已弃用'

    当我尝试在我的模拟器上运行它时,它给了我这个错误:

      

    抛出了Java.Lang.RuntimeException。

         

    无法启动活动ComponentInfo {com.companyname.tabletapp / md58d10de2bb92bb56e56e9e7d7c4f55d68.MainActivity}:java.lang.RuntimeException:您的内容必须具有一个ListView,其id属性为'android.R.id.list'

    我试图查看此错误,建议将以前的“@ + id / list”更改为“.android:id / list”在.axml文件中textView的属性中。我的文件甚至没有在其textView的属性中包含“@ + id / list”。我尝试添加“@android:id / list”,但我仍然得到同样的错误。

0 个答案:

没有答案