Những tính năng mới trong lập trình Windows Phone 8.1

Rate this post

Trong bài viết trước các bạn đã biết hiện thời có 2 framework dùng để lập trình Windows Phone 8.1 đó là: Windows Phone Store AppWindows Phone Silverlight app. Các bạn cũng đã biết nên dùng template nào để phát triển app phụ thuộc 2 yếu tố: loại app (mới hay nâng cấp) và tính năng mà app cung cấp. Chi tiết bài viết xem tại Phát triển ứng dụng Windows Phone 8.1 có gì mới. Trong bài viết này chúng ta sẽ đi sâu hơn vào những tính năng mới trong lập trình Windows Phone 8.1 dành cho developer.

Emulator + Visual Studio 2013 với rất nhiều tính năng mới hữu ích

Đầu tiên phải kể đến đó là trình giả lập (Emulator) trên bản Windows Phone 8.1 SDK (download tại đây) có rất nhiều cải tiến đáng giá. Giờ đây ngoài việc giả lập được các độ phân giải màn hình khác nhau thì emulator còn có thể giả lập được các kích thước màn hình khác nhau. Điều này sẽ rất hữu ích trong thời gian tới khi mà Microsoft free license của Windows 8.1 cho những thiết bị nhỏ hơn 9 inch, khi đó sẽ có rất nhiều thiết bị kích thước màn hình khác nhau xuất hiện. Hiện nay thì cũng đã có rất nhiều các thiết bị với kích thước màn hình khác nhau từ 3.8 inch như của Lumia 620 cho đến phablet 6 inch như Lumia 1520.

Chi tiết trên Visual Studio 2013, tại debug dropdown menu ngoài thông tin về độ phân giải được hỗ trợ (như WXGA, WVGA, 1080p…) bạn còn thấy thông tin về kích thước màn hình như sau:

Những tính năng mới của Windows Phone 8.1

Tính năng mới tiếp theo là giờ đây chúng ta có thể giả lập các thao tác đa chạm multi-touch (VD: phóng to/thu nhỏ) bằng sử dụng chuột, trước đây chúng ta chỉ có thể thực hiện được điều này trên thiết bị thật.

Những tính năng mới của Windows Phone 8.1

Tính năng mới thứ 3 và cũng là cuối cùng của emulator đó là bổ sung một loạt công cụ tiện ích rất cần thiết như là:

  • Công cụ giả lập kiểu và tốc độ mạng (2G, 3G…)
  • Công cụ giả lập push notification: chúng ta không cần phải gửi push notification thật từ application server để test nữa mà có thể giả lập ngay trên Emulator
  • Công cụ để giả lập SD card: chúng ta có thể thiết lập 1 thư mục và biến nó thành thẻ nhớ trên emulator, sau đó chúng ta có thể test các API đọc/ghi thẻ nhớ trên thư mục này.
  • Công cụ chụp nhanh (snapshot) emulator: Trước đây khi chúng ta tắt emulator thì tất cả các dữ liệu về các app đã cài, bộ nhớ… đều bị xóa nhưng giờ đây chúng ta có thể lưu lại trạng thái của emulator ở bất kỳ thời điểm nào và khôi phục lại ở lần chạy kế tiếp. Một tính năng rất tiện dụng J

Những tính năng mới của Windows Phone 8.1

Hơn thế nữa emulator mới còn hỗ trợ gõ TELEX, QWERTY và không cần đóng bàn phím ảo xuống mới gõ được bằng bàn phím của máy tính nên cực kỳ tiện lợi khi bạn cần kiểm thử các giao diện nhập liệu trên app (Nếu ai đã từng lập trình trên Windows Phone 7 hoặc Windows Phone 8 chắc chắn sẽ rất cảm ơn Microsoft vì đã làm cho emulator trở nên thông minh hơn :D)

Đấy là về emulator ngoài ra trên Visual Studio 2013 bởi việc thay đổi core sử dụng Windows Runtime nên giờ đây app Windows Phone 8.1 sử dụng file cấu hình thông tin phát hành (manifest) mới tên là Package.appxmanifest tương tự như trên Windows Store app, cấu hình này bổ sung thêm phần Declarations dùng để thiết lập những tính năng mở rộng khác của app. Ngoài ra file manifest mới còn có cấu hình thiết lập có cho phép app được cài đặt trên SD card hay không.

Lập trình Windows Phone 8.1

Vòng đời ứng dụng mới và navigation framework mới

Vòng đời ứng dụng (application lifecycle) của Windows Phone Store app tương tự như trên Windows Store app và có khá nhiều điểm khác biệt so với Windows Phone Silverlight app.

  • Về chi tiết kiến trúc có điểm giống trên Windows Phone P8: app Windows Phone 8.1 khi bị đưa vào background (trạng thái tạm dừng hoạt động – suspended) thì tất cả thread, hoạt động hiện thời của app sẽ bị hủy: app vẫn giữ trong bộ nhớ nhưng tất cả các tài nguyên khác như CPU… sẽ được giải phóng. Trong trường hợp không đủ bộ nhớ để mở các app mới thì hệ điều hành Windows Phone 8.1 sẽ đóng các app đang ở trạng thái tạm dừng hoạt động này mà không có bất kỳ cảnh báo nào. Vì vậy các lập trình viên được yêu cầu tự quản lý ngữ cảnh này (trên Windows Phone 8 được gọi là tombstoning) để lưu và khôi phục lại trạng thái của app một cách chính xác nhằm giúp người dùng sử dụng app như thể nó chưa từng bị tự động đóng bởi hệ điều hành.
  • Điểm khác so với Windows Phone 8 ở đây đó là app luôn luôn bị suspend: nếu người dùng ấn Back button ở page đầu tiên của app hoặc chạm vào Start button thì nó sẽ không bị thoát như trên Windows Phone 8 mà nó chỉ tạm dừng hoạt động. Điều này có nghĩa là dù người dùng chạy lại app bằng bất cứ cách nào (dùng trình quản lý app task switcher, chạm vào tile ở màn hình Start screen hay chạy app ở màn hình App list…) thì app cũng luôn được khôi phục từ instance trước đó (trừ khi người dùng đóng app bằng nút X ở màn hình task switcher)

Lập trình Windows Phone 8.1

Ngoài application lifecycle thì sự khác nhau lớn tiếp theo so với WP8 đó chính là navigation framework:

  • Back button giờ đây không tự động chuyển về trang trước của app như trên Windows Phone 8 mà là chuyển về app trước đó trong stack của hệ điều hành. Nếu chúng ta muốn giữ cơ chế navigate như trên Windows Phone 8 thì cần phải chặn sự kiện Back button và chuyển người dùng về trang trước của app: Rất may là mặc định project template mới trên Visual Studio 2013 đã có sẵn đoạn code này rồi và chúng ta không phải làm thêm gì.
  • Một thứ mới nữa đó là lớp NavigationService không còn tồn tại nữa mà nó được thay thế bởi lớp Frame cung cấp các phương thức để chuyển từ trang này đến trang khác trong app. Lợi thế của Frame đó là nó không liên quan gì đến Uri như trên WP8 vì thế nó có thể chuyển cả những complex object khi navigate thay vì chỉ có text trên QueryString như trước.

Ngoài application lifecycle và navigation framework thì một tính năng quan trọng khác đó là Windows Phone 8.1 giờ đây cũng hỗ trợ contracts như trên Windows Store app: Contracts
được hiểu là một cách để mở rộng app và tích hợp chúng vào trong hệ điều hành.

  • Một trong những contract rất hữu ích đó là sharing cho phép lập trình viên tạo ra những app có khả năng chia sẻ nội dung với những app khác (sharing source app) hoặc nhận nội dung được chia sẻ từ những app khác (sharing target app).
  • Tính năng contract đã làm xuất hiện một đặc tính mới trong vòng đời ứng dụng đó là: các app có thể được mở không phải bởi người dùng mà bởi các app khác và trong project thì App.xaml.cs sẽ là nơi sẽ quản lý tất cả các điểm khởi chạy app này.

Lập trình Windows Phone 8.1

Trên đây là những điểm mới khi sử dụng Windows Phone Store app còn nếu chúng ta vẫn dùng Windows Phone Silverlight app thì chỉ có một điểm cần lưu ý đó là tính năng Fast App Resume giờ đây sẽ được bật mặc định: instance ứng dụng bị tạm dừng hoạt động luôn luôn được phục hồi bất kể chạy ứng dụng từ đâu.

Các tính năng mới trên XAML

Với Windows Phone Store app: XAML dựa trên Windows Runtime nên bao gồm rất nhiều control và tính năng mới như trên Windows Store app vì thế giờ đây chúng ta không cần sử dụng Windows Phone Toolkit nữa. Các control trong Windows Runtime được chia thành 3 loại:

  • Chung: Các control có giao diện và thuộc tính giống nhau trên cả 2 nền tảng như Button, TextBlock, TextBox
  • Tối ưu cho từng nền tảng: Các control có thuộc tính giống nhau nhưng giao diện khác nhau để thích hợp với từng nền tảng. VD: DatePicker control trên Win8.1 được hiển thị thành 3 dropdown menu còn trên Windows Phone 8.1 lại được hiển thị trong một page riêng.
  • Riêng cho từng nền tảng: Các control chỉ tồn tại trên một nền tảng hoặc tồn tại trên cả 2 nền tảng nhưng với giao diện và thuộc tính khác nhau. VD: Pivot chỉ tồn tại trên Windows Phone 8.1. AppBar tồn tại trên cả 2 nền tảng nhưng cách implement thì hoàn toàn khác nhau.

Với Windows Runtime giờ đây không những app có thể share được code mà còn có thể share được cả XAML trên 2 nền tảng Windows Phone 8.1Win8.1

Ngoài control mới thì Windows Runtime cũng có một số control thay đổi so với Silverlight trên Windows Phone 8 như:

  • Control Panorama không còn tồn tại và được thay thế bởi Hub control.
  • ApplicationBar giờ đây sẽ được implement bằng AppBar control hỗ trợ 2 loại command: PrimaryCommandsSecondaryCommands
    • Win8.1 phân biệt bởi vị trí command còn Windows Phone 8.1 thì PrimaryCommand thay thế ApplicationBarIconButton, SecondaryCommand thay thế ApplicationBarMenuItem.
    • Ưu điểm của AppBarhỗ trợ hoàn toàn binding property, command qua mô hình MVVM (Trước đây trên Windows Phone 8 chúng ta phải sử dụng third party library Cimbalino để thực hiện điều này)
  • LonglistSelector control xuất hiện trên Windows Phone 8 nhưng nhược điểm của nó đó là phải tạo ra một class để thực hiện việc group mà không cho phép chúng ta thực hiện trực tiếp với tập dữ liệu nguồn. Lên Windows Phone 8.1 nó không còn tồn tại và được thay thế bởi 2 control: GridViewListView như trên Windows Store app. Các control này được tối ưu hóa để quản lý tập dữ liệu lớn, làm đơn giản hóa việc group dữ liệu

    Lập trình Windows Phone 8.1

Điểm mới cuối cùng về XAML trên Windows Phone 8.1 đó chính là cơ chế layout app trên Native XAML kiểu mới: Windows Phone Store app không còn các layout tự động thay đổi tỉ lệ theo độ phân giải màn hình nữa mà chúng sử dụng layout linh động (fluid layout) có khả năng tự điều chỉnh để thích hợp với mọi độ phân giải và kích thước màn hình giống như trên Windows Store app

Các tính năng mới trong việc lưu trữ dữ liệu trên thiết bị Storage APIs

Về phần lưu trữ dữ liệu trên thiết bị ngoài các class như LocalStorage, StorageFolder, StorageFile như trên Windows Phone 8 thì Windows Phone 8.1 đã bổ sung các API mới:

  • Bổ sung vùng nhớ TemporaryStorage dùng để lưu dữ liệu tạm, dữ liệu này sẽ được tự động xóa bởi hệ điều hành
  • Bổ sung vùng nhớ RoamingStorage có kích thước 100KB, nội dung được đồng bộ tự động với tất cả các thiết bị có cùng Microsoft Account (Windows Phone 8.1 + Win8.1)

Một số tính năng quan trọng khác bao gồm:

  • Khả năng truy cập (đọc/ghi) tới tất cả dữ liệu được lưu trữ trên multimedia library của người dùng được gọi là KnownFolders
    (PictureLibrary, MusicLibrary, VideoLibrary)
  • Khả năng đọc/ghi SD card.
  • Có thể quản lý và nhập khẩu file từ các app khác hoặc từ chính thiết bị qua các API như: FileOpenPicker, FileSavePicker

Lập trình Windows Phone 8.1

Tính năng định vị và quảng cáo di dộng theo địa điểm

Tính năng mới nhất trên Windows Phone 8.1 liên quan đến dịch vụ định vị là hỗ trợ quảng cáo di động theo địa điểm (geofencing). Với API mới bạn có thể:

  • Định ra vị trí trên bản đồ và khi người dùng đi vào trong vị trí này thì app của bạn sẽ được thông báo thậm chí ngay cả khi nó không chạy.
  • VD: Chúng ta có thể áp dụng điều này để tạo ra app tự động thông báo những khuyến mại đang có khi khách hàng bước vào shop nào đó…

Ngoài ra các API định vị được thống nhất lại như trên Win8.1 chỉ khác là bản đồ trên Win8.1 dùng Bing Maps còn trên Windows Phone 8.1 dùng Here Maps

Tính năng mới về Tile, Notifications và Notification Center

Windows Phone 8.1 core Windows Runtime giờ đây hỗ trợ tới 40 template tile như trên Win8.1 chứ không chỉ là 3 template như trên Windows Phone 8. Các template mới này linh hoạt hơn so với template cũ ở chỗ:

  • Bạn có thể quản lý nhiều ảnh, text nhiều dòng, biểu tượng. Mặc dù kiến trúc của tile vẫn như trên Windows Phone 8: mỗi tile sẽ được định nghĩa bởi XML nhưng sự khác biệt ở chỗ giờ đây template này được share với
    Windows Store app
    và tự động điều chỉnh theo nền tảng: trong trường hợp có một vài property không thể hiển thị trên một trong hai nền tảng thì nó sẽ bị bỏ qua thay vì gây lỗi.
  • Nguyên lý này cũng được áp dụng cho các toast notification: code định nghĩa toast cũng là xml nhưng giao diện thực khi hiển thị sẽ khác nhau trên Windows Phone 8.1Win8.1

Một điểm thay đổi quan trọng cần chú ý là trên Windows Phone 8.1 tile, toast
chỉ có thể được định nghĩa bằng XML, điều này khác so với trên Windows Phone 8 khi chỉ push notification yêu cầu dùng XML để định nghĩa, còn tile, toast có thể dùng các class như ShellTile, ShellToast.

Lập trình Windows Phone 8.1

Nếu muốn sử dụng cách cũ dựa trên class và object như Windows Phone 8 thì có thể sử dụng library được cung cấp bởi Microsoft gọi là NotificationExtensions.

Lập trình Windows Phone 8.1

Với việc sử dụng XML giờ đây việc xử lý push notification được thống nhất trên cả 2 nền tảng:

  • Chúng ta có thể gửi cùng một notification từ application server tới cả Windows PhoneWindows Store app. Điều này thực hiện được vì giờ đây cả 2 nền tảng cùng sử dụng WNS (Windows Notification Service) thay vì sử dụng MPNS (Microsoft Push Notification Service) để gửi nhận notification.
  • Về mặt kiến trúc notification vẫn giữ nguyên như cũ:
    • Ứng dụng đăng ký nhận notification sẽ nhận được từ WNS một URL định danh kênh gửi/nhận notification
    • Sau đó từ phía server side khi bạn muốn gửi một notification tới thiết bị: đơn giản chỉ cần POST một HTTP request tới URL ở trên với body request là nội dung XML notification.

Tất nhiên những ứng dụng đang dùng push notification hiện nay cũng không phải lo lắng quá vì MPNS vẫn còn và chúng ta vẫn có thể sử dụng chúng. Và nếu muốn thì bạn vẫn có thể sử dụng tiles mới + WNS trên Windows Phone Silverlight 8.1 app.

Liên quan đến notification thì tính năng được mong chờ nhất trên Windows Phone 8.1 đặc biệt là từ phía người dùng chính là Action Center – giống như Notification Center trên iOS, Android.

  • Action Center này lưu trữ tất cả toast notification mà các ứng dụng nhận được. Với developer thì tính năng này là tự động và chúng ta không phải làm bất cứ điều gì. Hơn thế nữa Windows Phone 8.1 còn cung cấp cho chúng ta:
    • Class ToastNotification để định nghĩa sau bao lâu thì notification sẽ biến mất khỏi Action Center (ExpirationTime) hoặc gửi tới ứng dụng những notification ảo (SuppressPopup = true): chúng không hiển thị tới người dùng như thông thường mà chỉ hiển thị trên Action Center.
    • Class ToastNotificationHistory để xóa những notification tạo bởi ứng dụng nếu muốn.

Lập trình Windows Phone 8.1

Ứng dụng chạy ngầm có gì mới?

Windows Phone 7.5 giới thiệu background agents: Một project riêng chứa code thực thi định kì bởi hệ điều hành ngay cả khi ứng dụng không chạy.

Windows Phone 8.1 với Windows Runtime thay vì dùng background agents đã chuyển sang dùng background tasks với nhiều cải tiến linh hoạt hơn:

  • Background tasks dựa trên triggers: nếu background agents bị giới hạn bởi việc thực thi theo một khoảng thời gian cố định (VD: mỗi 30 phút) thì background task có thể tự động kích hoạt thực thi khi:
    • Trạng thái hệ thống thay đổi (SystemTrigger như kết nối mạng bật/tắt)
    • Người dùng đi vào một vị trí địa lý nào đó (LocationTrigger),
    • App nhận được push notification (PushNotificationTrigger)
    • Thiết bị kết nối/ngắt kết nối với thiết bị khác qua Bluetooth (BluetoothSignalStrengthTrigger)
    • TimeTrigger: định kỳ chạy background task, ngắn nhất là 15 phút
    • MaintenanceTrigger: Thay thế ResourceIntensiveTask được dùng để thực hiện những hoạt động chạy ngầm trong thời gian dài và chỉ nên thực hiện khi thiết bị đang sạc.

Cùng với thay đổi này Visual Studio 2013 bổ sung thêm tính năng để test background task dễ dàng hơn: Trên Debug toolbar có thêm một dropdown menu dùng để khởi chạy một background task bất cứ khi nào bạn muốn

Lập trình Windows Phone 8.1

Ngoài những background task này thì Windows Runtime API còn bổ sung thêm BackgroundDownloaderBackgroundUploader class dùng để download/upload dữ liệu.

Chi tiết phần background task này tôi sẽ viết trong một bài post khác

API tương tác với thiết bị khác

Windows Phone 8 giới thiệu một tập API tên là Proximity APIs dùng để tương tác với các thiết bị khác qua công nghệ NFC, Bluetooth. Windows Phone 8.1 bổ sung thêm 2 công nghệ mới vào API này:

  • Bluetooth Low Energy (BLE): đây là một chuẩn Bluetooth mới được sử dụng bởi rất nhiều thiết bị mới trên thị trường như đồng hồ thông minh, thiết bị y tế… Với WP8.1 chúng ta có thể viết ra các ứng dụng để tương tác với các thiết bị này, trong tương lai chắc chắn sẽ có nhiều app dạng này xuất hiện. Chúng ta hãy cùng chờ xem.
  • Wifi direct: công nghệ dùng thiết lập kết nối trực tiếp giữa hai thiết bị qua Wifi

Multimedia có gì mới

Windows Phone 8.1 giới thiệu một tập các API mới gọi là Media Foundation API: Chúng ta có thể phát triển các ứng dụng chỉnh sửa audio và video như: cho phép người dùng cắt, thêm hiệu ứng hoặc chỉnh sửa video được ghi lại bởi phone.

Ngoài ra chúng ta còn có thể ghi lại các hành động của người dùng trên màn hình. VD: Chúng ta có thể bổ sung tính năng recording trong game để người dùng có thể xem lại hoặc chia sẻ với bạn bè qua facebook…

Tóm lại

Trong bài viết này tôi đã tóm lược lại tất cả những tính năng mới trong lập trình Windows Phone 8.1 dành cho developer. Đây là một bản cập nhật tuy chưa thực sự hoàn thiện nhưng chứa đựng khá nhiều tính năng mới, và quan trọng hơn hết là giờ đây Windows Phone 8.1Windows 8.1 sử dụng chung core: Tất cả sức mạnh cũng như tính năng của Windows 8.1 sẽ được hòa quyện với Windows Phone 8.1 thành một hệ sinh thái thống nhất. Chúng ta những lập trình viên được hưởng lợi rất nhiều từ việc này vì giờ đây chỉ cần viết một ứng dụng là có thể chạy được trên nhiều nền tảng, nhiều store và cơ hội kiếm tiền từ đó cũng tăng lên.

Vậy nếu thấy hứng thú các bạn hãy bắt tay xây dựng các ứng dụng Universal App cho riêng mình thôi vì trong vòng tháng 5/6 là Windows Phone 8.1 đã được phát hành chính thức rồi.

Learning by sharing. Stay tuned.

Comments

  1. Hoài Phúc says

    Bạn cho mình hỏi. Với việc không còn NavigationService nữa, thì mình có thể dùng cách nào để truyền liệu giữa các page? Cám ơn bạn

    • tungnt says

      Chào Phúc,

      Trong WP 8.1 bạn có thể truyền param khi navigate giữa các page như sau:

      Frame.Navigate(typeof(SecondPage), param);

      Chỉ khác biệt chút là param này dạng Object chứ không phải dạng Querystring như WP8.

      Chi tiết bạn tham khảo tại đây: http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2014/05/23/windows-phone-8-1-frame-page-navigationhelper-suspensionmanager.aspx

      Hy vong giải đáp được thắc mắc của bạn.

      Regard.

    • says

      Xin chào,

      Mình mới tìm hiểu lập trình WP, mình thấy online có nhiều ví dụ về WP lắm, mình demo thử cho xuất thông báo ‘Hellow World’ bằng Navigate những tìm hoài không có thư viện này. Mò ra mới biết là tạo sai project Windows Phone Silverlight.

      Mình giờ mơ hồ lắm, nó cứ update liên tục vậy thì khó thiệt @@

      • tungnt185tungnt185 says

        Chào bạn,

        Công nghệ là thế bạn ạ. Luôn luôn cập nhật và thay đổi từng phút từng giây. Chúng ta phải thích nghi với sự thay đổi đó thôi. Đấy cũng là cách giúp cho chúng ta ngày càng năng động hơn và học hỏi được nhiều hơn.

        Hãy thử và bạn sẽ thấy nó thực sự hấp dẫn :)

        Regards

Trackbacks

Leave a Reply to jetperfectJP Cancel reply

Your email address will not be published. Required fields are marked *