C# 尝试从UWP应用程序向Microsoft Band添加自定义磁贴

C# 尝试从UWP应用程序向Microsoft Band添加自定义磁贴,c#,uwp,microsoft-band,windows-10-universal,C#,Uwp,Microsoft Band,Windows 10 Universal,我想通过Windows Phone UWP应用程序中的Microsoft Band SDK向Microsoft Band添加自定义磁贴。这是我的示例代码 private async void ButtonBase_OnClick(object sender, RoutedEventArgs e) { try { // Get the list of Microsoft Bands paired to the phone.

我想通过Windows Phone UWP应用程序中的Microsoft Band SDK向Microsoft Band添加自定义磁贴。这是我的示例代码

private async void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        try
        {
            // Get the list of Microsoft Bands paired to the phone.
            var pairedBands = await BandClientManager.Instance.GetBandsAsync();
            if (pairedBands.Length < 1)
            {
                Debug.WriteLine("This sample app requires a Microsoft Band paired to your device.Also make sure that you have the latest firmware installed on your Band, as provided by the latest Microsoft Health app.");
                return;
            }

            // Connect to Microsoft Band.
            using (var bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]))
            {
                // Create a Tile with a TextButton on it.
                var myTileId = new Guid("12408A60-13EB-46C2-9D24-F14BF6A033C6");
                var myTile = new BandTile(myTileId)
                {
                    Name = "My Tile",
                    TileIcon = await LoadIcon("ms-appx:///Assets/SampleTileIconLarge.png"),
                    SmallIcon = await LoadIcon("ms-appx:///Assets/SampleTileIconSmall.png")
                };

                // Remove the Tile from the Band, if present. An application won't need to do this everytime it runs. 
                // But in case you modify this sample code and run it again, let's make sure to start fresh.
                await bandClient.TileManager.RemoveTileAsync(myTileId);

                // Create the Tile on the Band.
                await bandClient.TileManager.AddTileAsync(myTile);

                // Subscribe to Tile events.
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex);
        }
    }

    private async Task<BandIcon> LoadIcon(string uri)
    {
        StorageFile imageFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri(uri));

        using (IRandomAccessStream fileStream = await imageFile.OpenAsync(FileAccessMode.Read))
        {
            WriteableBitmap bitmap = new WriteableBitmap(1, 1);
            await bitmap.SetSourceAsync(fileStream);
            return bitmap.ToBandIcon();
        }
    }
private async void按钮base\u OnClick(对象发送方,RoutedEventArgs e)
{
尝试
{
//获取与手机配对的Microsoft频段列表。
var pairedBands=await-BandClientManager.Instance.GetBandsAsync();
if(成对条带长度<1)
{
Debug.WriteLine(“此示例应用程序需要与您的设备配对的Microsoft Band。还要确保您的Band上安装了最新的固件,如最新的Microsoft Health应用程序所提供的。”);
返回;
}
//连接到Microsoft Band。
使用(var-bandClient=await-BandClientManager.Instance.ConnectAsync(pairedBands[0]))
{
//创建一个带有文本按钮的互动程序。
var myTileId=新Guid(“12408A60-13EB-46C2-9D24-F14BF6A033C6”);
var myTile=新条带tile(myTileId)
{
Name=“我的瓷砖”,
TileIcon=等待加载图标(“ms-appx:///Assets/SampleTileIconLarge.png"),
SmallIcon=等待加载图标(“ms-appx:///Assets/SampleTileIconSmall.png")
};
//从带区中删除磁贴(如果存在)。应用程序不需要每次运行时都执行此操作。
//但是,如果您修改了这个示例代码并再次运行它,让我们确保重新开始。
等待bandClient.TileManager.RemoveTileAsync(myTileId);
//在条带上创建平铺。
等待bandClient.TileManager.AddTileAsync(myTile);
//订阅互动程序事件。
}
}
捕获(例外情况除外)
{
Debug.WriteLine(ex);
}
}
专用异步任务加载图标(字符串uri)
{
StorageFile imageFile=等待StorageFile.GetFileFromApplicationUrisync(新Uri(Uri));
使用(irandomaccesstream fileStream=wait imageFile.OpenAsync(FileAccessMode.Read))
{
WriteableBitmap位图=新的WriteableBitmap(1,1);
等待位图.SetSourceAsync(文件流);
返回位图.ToBandIcon();
}
}
如果我运行这个代码,什么都不会发生。应用程序已连接到Microsoft Band,但无法添加互动程序。方法
AddTileAsync(myTile)返回false,不向Microsoft Band添加磁贴

如果我在Windows Phone 8.1应用程序中尝试此代码,它会工作,但在UWP应用程序中不会

有什么想法吗

更新
这是你的电话号码。也许这会有所帮助。

也许这会有所帮助,来自MS Band的文档

using Microsoft.Band.Tiles;
...
try
{
    IEnumerable<BandTile> tiles = await bandClient.TileManager.GetTilesAsync();
}
catch (BandException ex)
{
    //handle exception 
}
//determine if there is space for tile
try
{
    int tileCapacity = await bandClient.TileManager.GetRemainingTileCapacityAsync();
}
catch (BandException ex)
{
    //handle ex
}
//create tile
WriteAbleBitmap smallIconBit = new WriteAbleBitmap(24, 24);
BandIcon smallIcon = smallIconBit.ToBandIcon();
WriteAbleBitmap largeIconBit = new WriteAbleBitmap(48, 48);//46, 46 for MS band 1
BandIcon largeIcon = largeIconBit.ToBandIcon();
Guid guid = Guid.NewGuid();
BandTile tile = new BandTile(guid)
{
    //enable Badging
    IsBadgingEnabled = true,
    Name = "MYNAME"
    SmallIcon = smallIcon;
    TileIcon = largeIcon;
};
try
{
    if(await bandClient.TileManager.AddTileAsync(tile))
    {
         ///console print something
    }
}
catch(BandException ex)
{
    //blabla handle
}
使用Microsoft.Band.Tiles;
...
尝试
{
IEnumerable tiles=wait-bandClient.TileManager.GetTilesAsync();
}
捕获(带异常)
{
//处理异常
}
//确定是否有空间放置平铺
尝试
{
int tileCapacity=Wait bandClient.TileManager.GetRemainingTileCapacityAsync();
}
捕获(带异常)
{
//手柄
}
//创建平铺
WriteAbleBitmap smallIconBit=新的WriteAbleBitmap(24,24);
BandIcon smallIcon=smallIconBit.ToBandIcon();
WriteAbleBitmap largeIconBit=新的WriteAbleBitmap(48,48)//46,MS波段1为46
BandIcon largeIcon=largeIconBit.ToBandIcon();
Guid=Guid.NewGuid();
BandTile磁贴=新的BandTile(guid)
{
//启用徽章
IsBadgingEnabled=true,
Name=“MYNAME”
SmallIcon=SmallIcon;
TileIcon=largeIcon;
};
尝试
{
if(等待bandClient.TileManager.AddTileAsync(平铺))
{
///控制台打印一些东西
}
}
捕获(带异常)
{
//刀柄
}

我认为问题可能是您将可写位图大小设置为(1,1)

我认为这种方法有效:

public static class BandIconUtil
{
    public static async Task<BandIcon> FromAssetAsync(string iconFileName, int size = 24)
    {
        string uri = "ms-appx:///" + iconFileName;
        StorageFile imageFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri(uri, UriKind.RelativeOrAbsolute));

        using (IRandomAccessStream fileStream = await imageFile.OpenAsync(FileAccessMode.Read))
        {
            WriteableBitmap bitmap = new WriteableBitmap(size, size);
            await bitmap.SetSourceAsync(fileStream);
            return bitmap.ToBandIcon();
        }

    }
}
公共静态类BandIconUtil
{
来自AssetAsync的公共静态异步任务(字符串iconFileName,int size=24)
{
字符串uri=“ms appx://”+iconFileName;
StorageFile imageFile=等待StorageFile.GetFileFromApplicationUriAsync(新Uri(Uri,UriKind.RelativeOrAbsolute));
使用(irandomaccesstream fileStream=wait imageFile.OpenAsync(FileAccessMode.Read))
{
WriteableBitmap位图=新的WriteableBitmap(大小、大小);
等待位图.SetSourceAsync(文件流);
返回位图.ToBandIcon();
}
}
}

您确定您的乐队尚未填满最多的瓷砖吗?顺便问一下,你在测试哪个乐队?正如@SvenBorden所说的,你可能想检查你是否有能力添加乐队磁贴。你好,Sven和James,我也检查了我在乐队上的能力。目前我有5个空位。我是针对Microsoft Band 2开发的。与此单击事件处理程序关联的按钮是否在SplitView控件(这是UWP的新控件)中?您好,Phil,在本示例中,它不在SplitView中,但我有时也尝试使用位于SplitView控件中的按钮。大家好,我也尝试过这种方法,但它并没有改变任何事情。我无法将我自己的磁贴添加到我的乐队。你解决了你的问题吗?如果没有,你是从你的手机还是从你的电脑推这些瓷砖?你试着重新设置乐队了吗?或者设置一个新项目?我想先从一个电话客户端开始。是的,我已经重新设置了乐队并设置了一个新项目。我已经用示例项目更新了我的问题。也许这有助于解决这个问题。