Попробуйте добавить пользовательскую плитку в Microsoft Band из приложения UWP.

Я хочу добавить пользовательскую плитку в Microsoft Band с помощью Microsoft Band SDK в приложении UWP для Windows Phone. Вот мой пример кода.

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();
        }
    }

Если я запускаю этот код, ничего не происходит. Приложение подключилось к Microsoft Band, но не может добавить плитку. Метод AddTileAsync(myTile); возвращает false и не добавляет плитку в Microsoft Band.

Если я попробую этот код в приложении Windows Phone 8.1, он сработает, но не в приложении UWP.

Любые идеи?

Обновление Вот пример загрузки. Может быть, это может помочь.


person Thomas Sebastian Jensen    schedule 06.12.2015    source источник
comment
Вы уверены, что еще не заполнили свою полосу максимальным количеством плиток? Кстати, с какой группой вы тестируете?   -  person Sven Borden    schedule 06.12.2015
comment
Как сказал @SvenBorden, вы можете проверить, можете ли вы добавить плитку полосы.   -  person James Croft    schedule 06.12.2015
comment
Здравствуйте, Свен и Джеймс, я также проверил, есть ли у меня возможности на Band. В настоящее время у меня есть 5 пустых слотов. Я разрабатывал против Microsoft Band 2.   -  person Thomas Sebastian Jensen    schedule 06.12.2015
comment
Связана ли кнопка с этим обработчиком событий щелчка в элементе управления SplitView (который является новым элементом управления для UWP)?   -  person Phil Hoff -- MSFT    schedule 07.12.2015
comment
Привет, Фил, в этом примере это не в SplitView, но я также пробовал иногда с кнопкой, которая находится в элементе управления SplitView. Есть ли известные проблемы.   -  person Thomas Sebastian Jensen    schedule 07.12.2015
comment
Существует известная проблема с отображением диалогового окна согласия на добавление плитки, когда приложение использует SplitView (когда диалоговое окно не отображается, а плитка не добавляется). Делает ли ваше приложение что-либо нестандартное, связанное с текущим фреймом окна?   -  person Phil Hoff -- MSFT    schedule 08.12.2015
comment
Здравствуйте @PhilHoff--MSFT: Нет. Я создал новое приложение UWP и интегрировал только кнопку с обработчиком кликов в коде. Я могу поделиться своим решением, если хотите.   -  person Thomas Sebastian Jensen    schedule 11.12.2015
comment
Я обновил свой вопрос с помощью примера проекта.   -  person Thomas Sebastian Jensen    schedule 12.12.2015


Ответы (2)


возможно, это поможет, исходя из документации 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
}
person Sven Borden    schedule 06.12.2015
comment
Привет, я тоже пробовал этот подход, но он ничего не меняет. Я не могу добавить свою плитку в группу. - person Thomas Sebastian Jensen; 07.12.2015
comment
Вы решили свою проблему? Если нет, вы загружаете эти плитки со своего телефона или с компьютера? ты пробовал сбросить группу? или задать новый проект для работы? - person Sven Borden; 11.12.2015
comment
Я хочу сначала начать с телефонного клиента. Да, я перезагрузил группу и настроил новый проект. Я обновил свой вопрос с помощью примера проекта. Возможно, это поможет решить эту проблему. - person Thomas Sebastian Jensen; 12.12.2015

Я думаю, проблема может заключаться в том, что вы устанавливаете размер записываемого растрового изображения на (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();
        }

    }
}
person InquisitorJax    schedule 21.03.2016