CycleTileの動作例をいくつか見てきましたが、これらはすべてローカルイメージを使用しています。アプリを最初に実行し、CycleTileをリモートイメージに向けると、これらのイメージを設定することは可能ですか?または、これらを電話に保存する必要がある場合、CycleTileを参照するにはどうすればよいですか?CycleTileをリモートイメージで作成する
答えて
CycleTileTemplate & CycleTileDataのみローカルURIをサポートし、リモートのWeb URIをサポートしていません。つまり、XAPまたはIsoStoreのファイルからインストールされたファイルからのみサイクルイメージのソースを設定できます。
CycleTileDataでリモートイメージをサポートするには、定期的なバックグラウンドエージェントでイメージをダウンロードし、イメージをIsoStoreに保存し、CycleTileDataをそれらのイメージで更新する必要があります。プッシュ通知はここでは機能しません。画像はローカルでなければならず、どちらもShellTileScheduleではないからです。
イメージを "/ Shared/ShellContent"の下のIsoStoreに保存し、URIを "isostore:/Shared/Shellcontent/myImage.png"に設定することを忘れないでください。そうしないと、開始画面のタイルにアクセスできなくなります。
例を見てみましょう。まず我々は、9つのダウンロードのスレッドを起動する並列化スレッドアルゴリズムを書くことから始めた結果を待ち、その後、タイルを更新します。
private IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
var threadFinishEvents = new List<WaitHandle>();
DownloadImages(threadFinishEvents);
new Thread(()=>
{
Mutex.WaitAll(threadFinishEvents.ToArray());
UpdateTiles();
isoStore.Dispose();
}).Start();
}
次に、我々は/共有/」IsoStoreに9枚の画像をダウンロードしますShellContent "と呼びます。私たちは、Webダウンロードごとに新しいスレッドフラグを追加し、ファイルがIsoStoreに入るとフラグを完了として設定することに注意します。
private void DownloadImages(List<WaitHandle> threadFinishEvents)
{
for (int i = 0; i < 9; i++)
{
var localI = i;
var threadFinish = new EventWaitHandle(false, EventResetMode.ManualReset);
threadFinishEvents.Add(threadFinish);
var request = WebRequest.CreateHttp("http://www.justinangel.net/storage/691x336.png");
request.BeginGetResponse(ir =>
{
var result = request.EndGetResponse(ir);
using (var isoStoreFile = isoStore.OpenFile("shared/shellcontent/myImage" + localI + ".png",
FileMode.Create,
FileAccess.ReadWrite))
using (var response = result.GetResponseStream())
{
var dataBuffer = new byte[1024];
while (response.Read(dataBuffer, 0, dataBuffer.Length) > 0)
{
isoStoreFile.Write(dataBuffer, 0, dataBuffer.Length);
}
}
threadFinish.Set();
}, null);
}
}
最後に、IsoStoreの新しい画像を使用するようにライブタイルを更新します。
private void UpdateTiles()
{
ShellTile.ActiveTiles
.First()
.Update(new CycleTileData()
{
Title = "Cyclical",
CycleImages = new Uri[]
{
new Uri("isostore:/Shared/ShellContent/myImage0.png", UriKind.Absolute),
new Uri("isostore:/Shared/ShellContent/myImage1.png", UriKind.Absolute),
new Uri("isostore:/Shared/ShellContent/myImage2.png", UriKind.Absolute),
new Uri("isostore:/Shared/ShellContent/myImage3.png", UriKind.Absolute),
new Uri("isostore:/Shared/ShellContent/myImage4.png", UriKind.Absolute),
new Uri("isostore:/Shared/ShellContent/myImage5.png", UriKind.Absolute),
new Uri("isostore:/Shared/ShellContent/myImage6.png", UriKind.Absolute),
new Uri("isostore:/Shared/ShellContent/myImage7.png", UriKind.Absolute),
new Uri("isostore:/Shared/ShellContent/myImage8.png", UriKind.Absolute),
}
});
}
考慮すべき興味深い物事のカップルがあります:それはMutex.WaitAllを活性化するとき、タイマーthreseholdを追加しても意味がとている場合がありますので、
- 定期的なバックグラウンドエージェントは、その動作を完了するまでに25秒を持っていますそれは優雅に失敗する。
- 25秒で9枚の画像をダウンロードすると、一部のネットワーク条件下で全く動作しないことがあるため、最適化するのが最適かもしれません。少ない画像を使用することも、30分ごとに少数の画像のみを更新することもできます。
- CycleTileDataを同じファイルURIに更新すると、タイル(AFAIK)の更新がトリガーされません。ですから、myImage0よりも良いファイル名が必要ですが、画像の一意のファイル名が必要です。
CycleTileの場合、画像はローカルである必要があります。あなたはperiodic taskを設定して画像を更新し、それらの画像をローカル/隔離されたストレージ(例えば、ms-appdata:///local/shared/shellcontent/image01.png)内の共有/シェルの特別なフォルダに保存することができます。
Session 7 of the Windows Phone 8 Jumpstartこのために良いリファレンスです - で、具体的には約25:30
- 1. codeigniterでリモートイメージをダウンロード
- 2. Glassfishのリモートイメージ
- 3. キャンバスへのリモートイメージのインポート
- 4. アクションスクリプト2.0、ビットマップデータとローカルvsリモートイメージ
- 5. リモートイメージをカールしてサイズを変更
- 6. ネイティブキャッシュのリモートイメージに反応しますか?
- 7. javascriptでリモートイメージの一部を取得できますか?
- 8. processingjsはリモートイメージをロードするときに404を返します。
- 9. pythonでリモートイメージをコピーするにはどうすればいいですか?
- 10. asynctaskとアダプターを使用してリモートイメージを表示する
- 11. PHPを使ってリモートイメージをダウンロードする(安全に)
- 12. リストビューにリモートイメージが表示されない
- 13. TabBarIOSのタブバーアイコンとしてのリモートイメージ?
- 14. PHP HTMLコンテンツをリモートイメージとスタイルシートでDOC/PDFに変換
- 15. vb.netのWindowsフォームにリモートイメージを挿入しますか?
- 16. Oracleでカーソルを作成する前にテーブルを作成する
- 17. プログラムでビューを作成する列を作成する
- 18. 2.2でフラグメントを作成する - 評価ビューアを作成する
- 19. アンドロイドでappwidgetのビューをプログラムで作成/作成する方法
- 20. Wicked PDFがPHPソースからリモートイメージをレンダリングしない
- 21. カスタム作成アクションを作成する
- 22. カスタムUDFをリスト上で作成してインデックスを作成する
- 23. カスタムでプログラムを作成してグラフを作成するFetchXML
- 24. "new"キーワードでオブジェクトを作成するか、Javaで "new"なしで作成する
- 25. ポップアップウィンドウでライトボックスを作成するには?ポップアップウィンドウでライトボックスを作成する方法
- 26. jqueryで作成された角を作成する
- 27. filer.fields.image.FilerImageFieldをプログラムで作成または作成する方法
- 28. コンポーザーでカスタム作成プロジェクトを作成する
- 29. cocos2d-xでカスタム作成機能を作成する方法
- 30. プロジェクトでナゲット作成フォルダを作成するには?
ダウンロードにバックグラウンドファイル転送を使用することをお勧めします。非常に信頼性が高く、25秒の制限には制約はありません。 –
マティス推奨+1。いいですよ。 – JustinAngel