MS Band SDK - 未按下按钮按下的事件处理程序

时间:2016-02-02 07:52:36

标签: c# microsoft-band

我已经在我的应用程序中使用按钮设置了我的磁贴和页面布局,但是当我按下按钮时,事件处理程序不会被调用。我尝试使用tile open事件处理程序,但这也不起作用。我的代码如下:

private async void OnConnectToBand()
{

    IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync();

    try
    {
        using (IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]))
        {

        //add tile, create page layout with button and add content with button

        //subscribe to listeners

        bandClient.TileManager.TileButtonPressed += EventHandler_TileButtonPressed;

        // Start listening for events 
        bandClient.TileManager.StartReadingsAsync();
        }
    }
    catch(BandException ex)
    { 
        //handle a Band connection exception 
    } 
}

void EventHandler_TileButtonPressed(object sender, BandTileEventArgs<IBandTileButtonPressedEvent> e)
{ 
// handle event
}

平铺和页面创建正常,但按钮不会触发事件处理程序。任何想法为什么没有被召唤?

更新:我刚刚再次浏览了我的代码和SDK doco,并记得我正在做一些不同的事情,这就是为什么它可能无法正常工作。 doco有以下用于将按钮添加到不编译的布局:

// create the content to assign to the page 
PageData pageContent = new PageData
( 
pageGuid, 
0, // index of our (only) layout 
new Button( 
        TilePageElementId.Button_PushMe, 
        “Push Me!”)
);

编译器说没有Button的构造函数接受2个参数。

我假设示例代码中有一个错误并将其更改为编译好的TextButtonData但现在我想知道这是否是事件处理程序不起作用的原因?代码是:

PageData pageContent = new PageData( 
      pageGuid, 
      0, // index of our (only) layout 
      new TextButtonData(
         (short)TilePageElementId.Button_PushMe, "Push"));

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

很高兴看到有人在MS乐队上发展......下面是一些讨论OnConnectToBand及其设置的链接

void EventHandler_TileButtonPressed(object sender,
BandTileEventArgs<IBandTileButtonPressedEvent> e)
{
 // This method is called when the user presses the
 // button in our tile’s layout.
 //
 // e.TileEvent.TileId is the tile’s Guid.
 // e.TileEvent.Timestamp is the DateTimeOffset of the event.
 // e.TileEvent.PageId is the Guid of our page with the button.
 // e.TileEvent.ElementId is the value assigned to the button
 // in our layout (i.e.,
 // TilePageElementId.Button_PushMe).
 //
 // handle the event
 }

第9节 - 处理自定义事件 http://developer.microsoftband.com/Content/docs/Microsoft%20Band%20SDK.pdf

谈论添加,点击,删除瓷砖 http://www.jayway.com/2015/03/04/first-impression-of-microsoft-band-developing-2/

答案 1 :(得分:1)

尝试添加一个对话框(下面是windows代码,对于ios或者android看看上面提到的手册)来响应事件(在上面的代码中你的事件处理程序中什么都没有?这看看它是否真的做点什么?

using Microsoft.Band.Notifications;

try
{
 // send a dialog to the Band for one of our tiles
 await bandClient.NotificationManager.ShowDialogAsync(tileGuid,
"Dialog title", "Dialog body");
}
catch (BandException ex)
{
// handle a Band connection exception
}

答案 2 :(得分:0)

当您有一个活跃的IBandClient实例(即与乐队的有效连接)时,您只能从乐队接收事件。在上面的代码中,bandClient实例在调用StartReadingsAsync()后立即处理,因为使用了using() {}块。当处置IBandClient实例时,它会导致应用程序与Band断开连接。

您需要在IBandClient实例上保留您希望接收事件的时间长度,并且仅在该时间之后处置该实例。