Following this question on Stack Overflow, I tried using the following code to add a tile in Windows phone:
public async Task<bool> CreateTile(string title) { SecondaryTile tileData = new SecondaryTile() { TileId = "MyTileID", DisplayName = "MyTilesTitle", Arguments = "Some arguments" }; tileData.VisualElements.Square150x150Logo = new Uri("msappx:///assets/TileIcon150x150.png"); tileData.VisualElements.ShowNameOnSquare150x150Logo = true; bool returnVal = await tileData.RequestCreateAsync(); return returnVal; }
This gives the following mystifying error:
A first chance exception of type ‘System.ArgumentException’ occurred in Tile.Plugin.WindowsPhoneStore.DLL
Additional information: Value does not fall within the expected range.
Suspecting it related to the icons, I tried commenting the suspected offending code:
public async Task<bool> CreateTile(string title) { SecondaryTile tileData = new SecondaryTile() { TileId = "MyTileID", DisplayName = "MyTilesTitle", Arguments = "Some arguments" }; //tileData.VisualElements.Square150x150Logo = new Uri("msappx:///assets/TileIcon150x150.png"); //tileData.VisualElements.ShowNameOnSquare150x150Logo = true; bool returnVal = await tileData.RequestCreateAsync(); return returnVal; }
The error messages don’t get any more useful:
The parameter is incorrect.
Turns out that the problem was with the URI Scheme. The following worked fine:
public async Task<bool> CreateTile(string title) { SecondaryTile tileData = new SecondaryTile() { TileId = "MyTileID", DisplayName = "MyTilesTitle", Arguments = "Some arguments" }; tileData.VisualElements.Square150x150Logo = new Uri("ms-appx:///assets/TileIcon150x150.png"); tileData.VisualElements.ShowNameOnSquare150x150Logo = true; bool returnVal = await tileData.RequestCreateAsync(); return returnVal; }
Conclusion
So, the moral of the story is, don’t forget to hyphenate the msappx for Windows Phone, or you’ll get a misleading error.