根據 Xamarin.Essentials 官方文件中指出:Xamarin.Essentials 跨平台應用程式開發介面的開發人員提供他們的行動應用程式。透過 Xamarin.Essentials 的套件幫忙,可以將這些功能整合到您的應用程式:加速計 應用程式資訊 電池 剪貼簿 指南針 資料傳輸 裝置顯示資訊 裝置資訊 電子郵件 檔案系統的協助程式 手電筒 地理編碼 地理位置 迴轉儀 磁力計 開啟瀏覽器 電話撥號員 喜好設定 螢幕鎖定 安全儲存體 SMS 文字轉換語音 追蹤版本 震動。
我們首先來體驗關於 Device Information 裝置資訊 這項功能,在其官方文件中有提到:DeviceInfo類別會提供執行應用程式之裝置的相關資訊,因此,我們來練習如何使用這些功能。
因此,可以參考底下的專案範例,該專案範例位於 https://github.com/vulcanlee/xamarin-forms-sample2018/tree/master/XFESDeviceInformation
建立測試專案
- 首先,我們先使用 Prism Template Pack 擴充功能所提供的專案樣板,建立起一個 Xamarin.Forms 專案,在這裡我們僅選擇 Android / iOS / UWP 類型的專案;接著,我們需要把 PropertyChanged.Fody NuGet 套件安裝到 .NET Standard 專案類別庫內,並且安裝 FodyWeavers.xml 檔案。
- 緊接著,我們要開始安裝 Xamarin.Essentials NuGet 套件到所有的專案內,在這裡,請使用滑鼠右擊方案節點,選擇 管理方案的 NuGet 套件 選項
- 請在 NuGet - 解決方案 的視窗中,輸入要搜尋的套件名稱 : Xamarin.Essentials並且,請勾選 包括搶鮮版 的文字檢查盒,並且安裝這個套件;我寫這篇文章的時候,Xamarin.Essentials 的最新版本為 0.7.0.17 版本,因此,我們安裝這個版本。
- 當 Xamarin.Essentials 套件安裝完成之後,您將會發現到在 Visual Studio 2017 的錯誤視窗中,出現了底下錯誤訊息
偵測到 Xamarin.Android.Support.Compat 的版本衝突。請直接從專案參考套件,以解決此問題。
XFESFileSystem.Android -> Xamarin.Essentials 0.7.0.17-preview -> Xamarin.Android.Support.CustomTabs 27.0.2 -> Xamarin.Android.Support.Compat (= 27.0.2)
XFESFileSystem.Android -> Xamarin.Android.Support.Design 25.4.0.2 -> Xamarin.Android.Support.Compat (= 25.4.0.2).
- 這個時候您可以參考 Xamarin.Essentials 體驗 1 : File System Helpers 檔案系統存取 文章中的解決辦法
- 如此,最初產生的錯誤訊息便會消失了。
- 我們將開始要進行 View ViewModel Model 的設計了,首先,我們開啟 MainPage.xaml 這個檔案,底下是我們測試的頁面 XAML 語法
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="XFESDeviceInformation.Views.MainPage"
Title="Device Information 裝置資訊">
<StackLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">
<Label Text="Welcome to Xamarin Forms and Prism!" />
<Label Text="{Binding Model, StringFormat='DeviceInfo.Model : {0}'}"/>
<Label Text="{Binding Manufacturer, StringFormat='DeviceInfo.Manufacturer : {0}'}"/>
<Label Text="{Binding Name, StringFormat='DeviceInfo.Name : {0}'}"/>
<Label Text="{Binding VersionString, StringFormat='DeviceInfo.VersionString : {0}'}"/>
<Label Text="{Binding Platform, StringFormat='DeviceInfo.Platform : {0}'}"/>
<Label Text="{Binding Idiom, StringFormat='DeviceInfo.Idiom : {0}'}"/>
<Label Text="{Binding DeviceType, StringFormat='DeviceInfo.DeviceType : {0}'}"/>
</StackLayout>
</ContentPage>
- 請打開 MainPageViewModel.cs 這個檔案在這個檔案中,我們將會在 OnNavigatedTo 事件中,使用 DeviceInfo 類別各個屬性,將其值取出來,設定要綁定到頁面的屬性物件中。
using Prism.Commands;
using Prism.Mvvm;
using Prism.Navigation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace XFESDeviceInformation.ViewModels
{
using System.ComponentModel;
using Prism.Events;
using Prism.Navigation;
using Prism.Services;
using Xamarin.Essentials;
public class MainPageViewModel : INotifyPropertyChanged, INavigationAware
{
public event PropertyChangedEventHandler PropertyChanged;
public string Model { get; set; }
public string Manufacturer { get; set; }
public string Name { get; set; }
public string VersionString { get; set; }
public string Platform { get; set; }
public string Idiom { get; set; }
public string DeviceType { get; set; }
private readonly INavigationService _navigationService;
public MainPageViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
}
public void OnNavigatedFrom(NavigationParameters parameters)
{
}
public void OnNavigatingTo(NavigationParameters parameters)
{
}
public void OnNavigatedTo(NavigationParameters parameters)
{
Model = DeviceInfo.Model;
Manufacturer = DeviceInfo.Manufacturer;
Name = DeviceInfo.Name;
VersionString = DeviceInfo.VersionString;
Platform = DeviceInfo.Platform;
Idiom = DeviceInfo.Idiom;
DeviceType = DeviceInfo.DeviceType.ToString();
}
}
}
- 根據官方文件上的說明Platforms 平台,DeviceInfo.Platform 相互關聯會對應至作業系統與常數字串。
- DeviceInfo.Platforms.iOS – iOS
- DeviceInfo.Platforms.Android – Android
- DeviceInfo.Platforms.UWP – UWP
- DeviceInfo.Platforms.Unsupported – 不支援
Idioms 慣用語,DeviceInfo.Idiom 相互關聯的常數字串,將應用程式對應至類型的裝置上正在執行。- DeviceInfo.Idioms.Phone – 電話
- DeviceInfo.Idioms.Tablet – 平板電腦
- DeviceInfo.Idioms.Desktop – 桌面
- DeviceInfo.Idioms.TV – 電視
- DeviceInfo.Idioms.Unsupported – 不支援
Device Type 裝置類型,DeviceInfo.DeviceType 列舉型別來判斷應用程式是否執行下列項目的上實體或虛擬裝置將相互關聯。 模擬器虛擬裝置。 - Android 平台執行結果
- UWP 平台執行結果