【问题标题】:Why does the People app show no contacts / doesn't allow me to pick contacts?为什么人脉应用不显示联系人/不允许我选择联系人?
【发布时间】:2012-11-20 13:53:27
【问题描述】:

我正在尝试允许用户以这种方式从“人脉”应用中选择联系人:

private async Task<System.Collections.Generic.KeyValuePair<string, string>> SelectAContactForASlot()
{
    KeyValuePair<string, string> kvp; // = new KeyValuePair<string, string>();
    var contactPicker = new Windows.ApplicationModel.Contacts.ContactPicker();
    contactPicker.CommitButtonText = "Select";
    var contact = await contactPicker.PickSingleContactAsync();
    if (contact != null)
    {
        kvp = new KeyValuePair<string, string>(contact.Name, contact.Emails[0].ToString());
        return kvp;
    }
    return kvp = new KeyValuePair<string, string>("No Name found", "No email found");
}

People 应用确实被调用了,但它看起来像这样:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ 人v

出了点问题,此应用目前无法选择联系人。

再次尝试选择该应用。

            | Select |  | Cancel |

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~

我昨天添加了几个联系人,所以它确实包含联系人。我的代码有问题吗,或者我该如何解决这个问题?

【问题讨论】:

  • 您是否在清单文件 (WMAppManifest.xml) 中添加了 ID_CAP_CONTACTS 功能?
  • 清单文件名为 Package.appxmanifest(所有 Windows 应用商店应用程序都相同); Package.appxmanifest 的 Declarations 部分有一个“Contact Picker”项,但我完全不确定这对于简单地调用本机 People 应用程序是必需的;它的描述是“将应用程序注册为人员选择器,使应用程序中的联系人详细信息可用于其他 Windows 8 应用程序......”
  • 抱歉,我将标签误读为 Windows Phone 8。您是否尝试过启用它只是为了看看它是否有效?
  • 如果我添加“Contact Picker”声明,它还想知道Executable,入口点和Start page(我不知道我应该放什么;我真的不认为这个适用于我的场景)。

标签: c# windows-8 windows-runtime windows-store-apps


【解决方案1】:

我尝试了您的代码,它按预期打开了联系人选择器。只是为了测试,尝试使用单个按钮创建一个新应用程序,该按钮从其Click 事件处理程序调用您的方法,就像我做的那样。

此外,如果问题仍然存在,您可能需要重新登录/重新启动计算机。我知道我过去在共享功能上也遇到过类似的问题 - 在我的代码中处理错误之后,即使是正确的代码也无法正常工作,直到重新启动。

当我这样做时:您可能想要稍微更改您的代码 - 要真正获取电子邮件地址,请将 contact.Emails[0].ToString() 替换为 contact.Emails[0].Value

private async Task<System.Collections.Generic.KeyValuePair<string, string>> SelectAContactForASlot()
{
    KeyValuePair<string, string> kvp; // = new KeyValuePair<string, string>();
    var contactPicker = new Windows.ApplicationModel.Contacts.ContactPicker();
    contactPicker.CommitButtonText = "Select";
    var contact = await contactPicker.PickSingleContactAsync();
    if (contact != null)
    {
        kvp = new KeyValuePair<string, string>(contact.Name, contact.Emails[0].Value);
        return kvp;
    }
    return kvp = new KeyValuePair<string, string>("No Name found", "No email found");
}

当联系人也没有任何电子邮件地址时,不要忘记处理案例。

【讨论】:

  • 谢谢;我将代码更改为使用 Value 而不是 ToString(),并添加了对空值(电子邮件地址)的检查。但是,我现在可以显示联系人选择器(显然临时故障已通过重新启动或其他方式修复),但其中仍然没有联系人,所以它仍然是一个问题。我添加了我可以添加的联系人(来自 att.net 等),甚至手动添加了几个,但仍然显示没有可用的联系人。
  • @Clay 它只是在显示联系人和不显示联系人之间随机切换?但是,如果您打开“人脉”应用程序,您总是会看到联系人吗?您是否有任何机会注册了多个联系人选择器,并且由于某种原因它并不总是被选中的同一个?您可以通过点击屏幕左上角选择器的标题(应该是人物)在它们之间进行切换。
  • “人脉”应用程序始终显示,我可以从下拉列表中选择“人脉”(那里只有一个);到那时,它通常会说它不可用 - 我只看过一次联系人列表 - 足以知道我的代码有效,还有其他问题。
  • @ClayShannon 您是否有机会尝试在此应用或其他应用中自己实现联系人选择器?如果(尚未)正确实施,这可能会导致问题。如果您尝试运行您的应用程序并在重新启动后立即打开联系人选择器,它会起作用吗?你有没有可能在另一台机器上试一试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 2019-06-03
  • 2013-05-15
  • 1970-01-01
相关资源
最近更新 更多