Thứ Tư, 14 tháng 9, 2016

Background Task trong Windows Store App

  Không có nhận xét nào

Hôm nay, mình sẽ hướng dẫn tạo một app windows store có thể chạy ngầm, khi mà ứng dụng vẫn đang hoạt động dù bạn không thao tác hay đang thao tác một ứng dụng khác. Chủ đề chỉ cho bạn làm thế nào để tạo và đăng ký chạy nền trong Windows. Bắt đầu nào :)

1. Khái niệm

Background Task là tác vụ nền, cụ thể ở đây là tác vụ hay ứng dụng chạy nền trong Windows.


Để dễ hình dung, bạn có thể dễ ràng nhận thấy trong thực tế có rất nhiều ứng dụng Background Task, vd: Unikey, Nhaccuatui, Facebook, Zalo, pm Diệt virust,.. Điểm chung của chúng bạn có thể nhận thấy là tuy bạn không tương tác (lockscreen, run app khác,.) nhưng nó vẫn hoạt động, chơi nhạc, đẩy thông báo, quyét virut ngầm,.. Đó là nhờ Background Task


Giờ bắt tay nào code nào :)

2. Thiết kế giao diện

Điều đầu tiên, dĩ nhiên là tạo project mới rồi :)

Vào Solution Explorer -> Mở Package.appxmanifest -> Declarations -> Trong Available Declarations chọn Background Task -> Add -> Tích System event trong Properties -> Nhập “BackgroundTasks.Update” trong Entry Point

Chọn MainPage.xaml, để quay lại phần thiết kế XAML 

<TextBlock x:Name="lblResult" FontSize="25" Margin="458,418,508,250" Width="400"/><Button x:Name="btnRegister" Content="Register" Click="Register_Click" Margin="638,378,0,352"/>

Chọn vào nút Button vừa tạo

Giữ nút Ctrl và nhập đúp chuột vào để tạo sự kiện bên MainPage.xaml.cs


3. Code Xử Lý

Thêm thư viện
using Windows.ApplicationModel.Background;
Khai báo biến và tạo hàm fnChkReg(): kiểm tra xem Background Task đã được đăng ký hay chưa  


Tạo hàm RegBgTask(): đăng ký  Background Task                 


  
Tạo hàm UnRegBgTask(): hủy  đăng ký  Background Task


Trong sự kiện nút Register_Click


Full Code
namespace BackgroundTask
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        bool r = false;
        public MainPage()
        {
            this.InitializeComponent();
        }

        private void fnChkReg()
        {
            foreach(var t in BackgroundTaskRegistration.AllTasks)
            {
                if (t.Value.Name == "Update")
                {
                    r = true;break;
                }
                if (r) { btnRegister.Content = "UnRegister";lblResult.Text = "Task Registered"; }
                if (!r) { btnRegister.Content = "Register"; lblResult.Text = "Task UnRegistered"; }
            }

        }
        private void RegBgTask(string n, string p)
        {
            BackgroundTaskBuilder b = new BackgroundTaskBuilder();
            b.Name = n;
            b.TaskEntryPoint = p;
            b.SetTrigger(new SystemTrigger(SystemTriggerType.InternetAvailable, false));
            BackgroundTaskRegistration t = b.Register();
        }
        private void UnRegBgTask(string name)
        {
            foreach(var t in BackgroundTaskRegistration.AllTasks)
            {
                if (t.Value.Name == Name) { t.Value.Unregister(true); }
            }
        }
        private void Register_Click(object sender, RoutedEventArgs e)
        {
            if (r) { UnRegBgTask("Update"); r = false; } else { RegBgTask("Update", "BackgroudTask.Update"); }
            fnChkReg();
        }
    }

}

4. Tổng kết

Qua bài hướng dẫn trên các mong các bạn hình dung và hiểu rõ hơn nguyên lý, cách hoạt động Background Task trong Windows Store App. Nó là thành phần thiết yếu trong đa phần app hiện nay.

5. Tài liệu tham khảo



Không có nhận xét nào :

Đăng nhận xét