我正在尝试使用Xamarin Studio为Android开发应用程序。 我的应用程序包括它的自定义短信发送功能。我遵循了here的说明。我的应用程序将短信的文本存储在我可以使用SmsManager发送的字符串中,但仅当我在代码中指明收件人编号时才会这样。
我可以创建一个editText字段,用户可以在其中输入数字,我的应用程序将解析输入以将短信发送到指定的数字。但我希望用户能够轻松地做到这一点。所以我想添加一个Spinner并用来自用户手机的联系人填充它。那我该怎么做呢?
当用户点击Spinner时,他们会获得联系人的下拉列表,他们可以选择要将短信发送给谁。然后,当他们点击“发送”按钮时,应用程序将解析Spinner当前所选联系人的号码,并将我的短信发送到该号码。
如果可能,您能举例说明如何以编程方式完成此操作吗?
提前谢谢。
编辑: 我试过跟随this article来阅读联系人,但我遇到了两个问题:
这些联系人将在哪里存储在我的应用中?它们会列在textView中吗?
我无法使用此代码运行我的应用。
这就是我所做的:我打开了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”,但我仍然得到同样的错误。