Live tile trong Windows Phone

livetile

Bạn đang phát triển một ứng dụng đọc tin tức, nhưng chưa biết làm thế nào để cập nhật live tile cho icon đã Pin ra Start screen, ở bài này mình sẽ hướng dẫn các bạn cách đơn giản nhất đó là dùng ScheduledTaskAgent update mỗi 30 phút.

Live Tile là gì?

Nó là quá trình cập nhật và thông báo ra Icon cho người dùng biết là ứng dụng có sự thay đổi nào đó (ví dụ có tin mới, màu icon thay đổi theo mùa, nhắc nhở,…). Người dùng sẽ lựa chọn những ứng dụng họ cần để bật tính năng này lên (Setting > Application > Background Task) vì mỗi điện thoại chỉ được dùng tối đa 6 task như vậy thôi.

Code

Bạn tạo một project windows phone bình thường, sau đó nhấp chuột phải lên Solution chính bên khung Solution Explorer để add thêm project khác có tên Template là Windows Phone Scheduled Task Agent nó sẽ tự tạo cho bạn hàm chính OnInvoke.

Cái bạn cần làm đó là ý tưởng của bạn đặt trước hàm NotifyComplete. Lưu ý nếu quá trình update của bạn mất nhiều thời gian (thường là dùng async) thì bạn phải đặt hàm NotifyComplete sao cho không bị gọi trước khi quá trình update kết thúc.

Lưu ý: bạn cần add thêm (using) System.Linq. Ví dụ:


protected async override void OnInvoke(ScheduledTask task)
{
    UpdateLiveTile();
}

protected async void UpdateLiveTile()
{
    try
    {
        ShellTile appTile = ShellTile.ActiveTiles.First(); //add linQ
        if (appTile != null)
        {
            // những ý tưởng của các bạn sẽ gán vào StandardTileData này,
            // có thể chạy async để lấy từ server về…
            // ở đây mình gán thẳng để demo nhé
            StandardTileData st = new StandardTileData();

            // Count: số hiện trên Icon, thường biểu thị cho số lượng tin mới
            // có giá trị từ 0-99,
            // 0 thì không hiện, không set thì số hiện tại trên Icon không đổi
            st.Count = 2;

            // tiêu đề thay cho app name
            st.Title = “Bạn có tin mới”;

            // tiêu đề cho trang lật phía sau
            st.BackTitle = “Tin từ mục Công Nghệ”;

            // Dòng chữ phía trên BackTitle,
            // không set thì BackContent trước sẽ không thay đổi
            st.BackContent = “MS update Amber \r\n Nokia ra mắt Lumia 925″;

            // ảnh nền cho mặt chính
            st.BackgroundImage = new Uri(“anhChinh.jpg”, UriKind.RelativeOrAbsolute);

            // ảnh nền cho mặt lật phía sau
            st.BackBackgroundImage = new Uri(“anhPhu.jpg”, UriKind.RelativeOrAbsolute);

            appTile.Update(st);
            NotifyComplete();
        }
    }
    catch{ }
}

Tiếp theo, các bạn add reference cho project chính, trong khung chọn Reference bạn chọn Solution > Project sẽ thấy ScheduledTaskAgent bạn vừa tạo. Bạn mở file App.xaml.cs thêm hàm này vô:


public static void StartAgent()
{
    StopAgentIfStarted();
    PeriodicTask task = new PeriodicTask(“TinTucUpdate”);
    task.Description = “Live tile cho tin tức”;
    ScheduledActionService.Add(task);

    #if DEBUG
    //Nếu bạn debug app thì Task sẽ chạy ngay sau 5s mà không cần đợi 30 phút
    ScheduledActionService.LaunchForTest(“WSVNentertainment”, new TimeSpan(0, 0, 5));
    #endif
}
public static void StopAgentIfStarted()
{
    if (ScheduledActionService.Find(“TinTucUpdate”) != null)
    {
        ScheduledActionService.Remove(“TinTucUpdate”);
    }
}

Và cuối cùng chỉ cần thêm hàm StartAgent vào trong Application_Closing là ok.

Run project, app mở lên rồi bạn tắt đi, Pin một icon lớn của app ra Start Screen , Task sẽ chạy bạn thấy ngay. Lưu ý khi app đã lên Store thì Task chỉ chạy sau mỗi 30 phút nhé!

Chúc các bạn thành công!

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s