C#使用Xamarin開發可移植移動應用終章(11.獲取設備信息與經常使用組件,開源一個可開發模版.)

原文: C#使用Xamarin開發可移植移動應用終章(11.獲取設備信息與經常使用組件,開源一個可開發模版.)

前言

系列目錄

C#使用Xamarin開發可移植移動應用目錄html

源碼地址:https://github.com/l2999019/DemoAppjava

能夠Star一下,隨意 - -git

說點什麼..

本系列,終於要終章了..感受有點小失落github

把我最終的成果模版開源出來吧地址以下:api

https://github.com/l2999019/Xamarin.FormsDemo_CHN瀏覽器

效果如圖:緩存

基本算是涵蓋了常見APP大部分的功能吧..安全

WebView,二維碼掃描,開燈,地圖,定位,終端設備的信息網絡

 

正文

Xamarin在社區中其實有不少比較方便的組件,方便你們直接使用.併發

並且Xamarin團隊將這些社區組件整理成了一個列表,方便咱們查詢.

列表的Github地址以下:

https://github.com/xamarin/XamarinComponents

 

今天咱們主要是以設備信息組件爲例子介紹一下如何使用社區組件

首先咱們須要查詢到本身須要使用的組件.

由於是英文,並且單詞比較簡單,因此我直接用谷歌翻譯了,表格以下:

名稱 描述 的NuGet 文檔和來源 創造者
錄音機 在設備的麥克風輸入上錄製音頻。 的NuGet GitHub上 @NateRickard
電池狀態 收集電池電量,充電狀態和類型。 的NuGet GitHub上 @JamesMontemagno
掃碼機 使用ZXing.NET.Mobile掃描和建立條形碼。 的NuGet GitHub上 @Redth
藍牙LE 掃描並鏈接到藍牙設備。 的NuGet GitHub上 @ allanritchie911
日曆 查詢和修改設備日曆 的NuGet GitHub上 迦勒克拉克
羅盤 訪問設備指南針標題。 的NuGet GitHub上 @cbartonnh@JamesMontemagno
配置 爲每一個將運行的環境定義應用程序的設置。 的NuGet GitHub上 @ abonilla93
鏈接 獲取網絡鏈接信息,如類型和鏈接是否可用。 的NuGet GitHub上 @JamesMontemagno
加密 PCL Crypto提供了一套一致的便攜式加密API。 的NuGet GitHub上 @aarnott
設備信息 有關設備的屬性,如OS,Model和Id。 的NuGet GitHub上 @JamesMontemagno
設備運動 提供對加速計,陀螺儀,磁力計和指南針的訪問。 的NuGet GitHub上 @rdelrosario
嵌入式資源 解壓嵌入式資源跨平臺。 的NuGet GitHub上 @JosephHill
外部地圖 從經緯度或地址啓動外部地圖。 的NuGet GitHub上 @JamesMontemagno
文件存儲/文件系統 PCL存儲提供跨平臺的存儲API。 的NuGet GitHub上 @dsplaisted
文件選擇器 選擇並保存文件。 的NuGet GitHub上 @studyxnet
文件上傳 使用多部分請求上傳文件。 的NuGet GitHub上 @rdelrosario
指紋 在iOS,Android和Windows上訪問指紋傳感器。 的NuGet GitHub上 @smstuebe
FFImageLoading 圖像加載與緩存,佔位符,轉換和更多 的NuGet GitHub上 molinch@ daniel-luberda
地理圍欄 當用戶進入/退出時監控區域。 的NuGet GitHub上 @ allanritchie911
Geolocator 輕鬆檢測設備的GPS位置。 的NuGet GitHub上 @JamesMontemagno
HTTP傳輸 在後臺下載或上傳文件。提供速度指標和估計 的NuGet GitHub上 @ allanritchie911
iBeacon&Estimote 範圍和監視藍牙信標。 的NuGet GitHub上 @ allanritchie911
應用內結算 製做,查詢並獲取應用內購買和訂閱。 的NuGet GitHub上 @JamesMontemagno
訪問LED 的NuGet GitHub上 @kphillpotts
本地通知 顯示本地通知 的NuGet GitHub上 @EdSnider@JamesMontemagno
本地通知 管理本地通知 的NuGet GitHub上 @ allanritchie911
管理睡眠 管理自動睡眠/自動鎖定。 的NuGet GitHub上 @ molinch0
媒體 拍照或錄像。 的NuGet GitHub上 @JamesMontemagno
媒體經理 播放音頻。 的NuGet GitHub上 @mhvdijk
消息 撥打電話,發送短信,併發送電子郵件 的NuGet GitHub上 @cjlotz
微軟樂隊 從共享代碼鏈接並與Microsoft Band進行通訊! 的NuGet GitHub上 @mattleibow
Mono.Data.Sqlite 將Mono.Data.Sqlite添加到任何Xamarin或Windows .NET應用程序。 的NuGet GitHub上 @mattleibow
權限 輕鬆檢查並請求運行時權限。 的NuGet GitHub上 @JamesMontemagno
持久的鍵值存儲 Akavache是​​一個異步持久(即寫入磁盤)鍵值存儲。 的NuGet GitHub上 @paulcbetts
便攜式剃刀 用於移動的ASP.NET MVC API的輕量級實現。 的NuGet GitHub上 @JosephHill
推送通知 跨平臺iOS和Android推送通知。 的NuGet GitHub上 @rdelrosario
安全存儲 爲關鍵值對數據提供安全存儲 的NuGet GitHub上 @sameerIOTApps
設置 簡單和一致的跨平臺設置API。 的NuGet GitHub上 @JamesMontemagno
分享 輕鬆共享文本,連接或打開瀏覽器。 的NuGet GitHub上 @JamesMontemagno@JakobGürtl
傳感器 設備傳感器 - 加速度計,環境光,氣壓計,指南針,設備方位,陀螺儀,磁力計,計步器和接近 的NuGet GitHub上 @ allanritchie911
套接字 TCP和UDP偵聽器和客戶端+ UDP多播。 的NuGet GitHub上 @rdavis_au
語音識別 語音到文本。 的NuGet GitHub上 @ allanritchie911
簡單的音頻播放器 從共享庫播放多個MP3或波形文件。 的NuGet GitHub上 @adrianstevens
文字轉語音 從共享代碼中回覆文本。 的NuGet GitHub上 @JamesMontemagno
烤麪包 顯示吐司/彈出式通知的簡單方法。 的NuGet GitHub上 @AdamPed@EgorBo
用戶對話框 消息框樣式對話框。 的NuGet GitHub上 @ allanritchie911
版本跟蹤 跟蹤用戶之前安裝的應用程序的版本。 的NuGet GitHub上 @ColbyLWilliams
顫動 振動任何設備。 的NuGet GitHub上 @JamesMontemagno
設備方向 插件用於屏幕方向(更改和鎖定) 的NuGet GitHub上 @YauheniPakala

 

咱們今天要使用設備信息的組件.,因此直接找到設備信息,而後進入nuget界面,引用.

注意,這裏要強調的一點是,當你使用這些組件的時候,必定須要PCL項目加上客戶端項目,都要引用

也就是如圖:

 

紅框中的三個項目,都須要引用一樣的nuget庫.由於PCL中是接口,各個平臺客戶端纔是具體實現.

須要仔細看文檔說明,有些插件是須要初始化的,因此須要你在客戶端項目中初始化,好比二維碼插件( ZXing.Net.Mobile)

剩下的代碼就很簡單了,咱們先建立一個Page,並添加listView控件以下:

<?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="Xamarin.FormsDemo_CHN.Views.SheBeiInfoPage"
             Title="設備信息"
             >
    <ContentPage.Content>
        <StackLayout>
            <ListView x:Name="ItemsListView" >
                <ListView.ItemTemplate >
                    <DataTemplate >
                        <TextCell Text="{Binding TextName}" Detail="{Binding Name}"  DetailColor="#7EC0EE"  />
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
            <Label Text="Welcome to Xamarin.Forms!"
                VerticalOptions="CenterAndExpand" 
                HorizontalOptions="CenterAndExpand" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

 

 而後直接F7,進入後臺代碼,編寫代碼以下:

public partial class SheBeiInfoPage : ContentPage
    {
        List<dynamic> date = new List<dynamic>();
        public SheBeiInfoPage()
        {
            InitializeComponent();
            AddPhoneInfo();
            ItemsListView.ItemsSource = date;
        }

        public void AddPhoneInfo()
        {
            string model = CrossDeviceInfo.Current.Model;
            string Version = CrossDeviceInfo.Current.Version;
            string VersionNumber = CrossDeviceInfo.Current.VersionNumber.ToString();
            string Platform = CrossDeviceInfo.Current.Platform.ToString();
            date.Add(new { TextName = model, Name = "設備名稱" });
            date.Add(new { TextName = Version, Name = "設備版本" });
            date.Add(new { TextName = VersionNumber, Name = "設備版本號" });
            date.Add(new { TextName = Platform, Name = "設備平臺" });

        }

        
    }

 

 由於封裝的已經很完善了,直接經過靜態類CrossDeviceInfo,就能夠獲取相關的設備信息.

tip:最新的版本新增了判斷是否爲模擬器的功能,可是nuget好像沒加入,須要使用的話能夠從github自行編譯.

 

關於綁定Jar類庫

原本打算這篇文章講綁定類庫,可是看了一下,網上已經不少這類的文章了,原本操做也比較簡單...我就不過多的譁衆取寵了.

惟一要解釋的一點,

就是關於綁定了類庫以後,會類名,變量名報錯的問題.

不少文章都是一筆帶過..讓你們修改Metadate.xml更改綁定規則就完事了..

不過我以爲 授人以魚不如授人以漁.

出現這個錯誤的主要緣由是:

GAPI這個工具,會將java代碼自動化解析成C#代碼,可是,完美的解析,是不可能的.

因此會出現少許的錯誤信息,須要咱們配置這個xml文件來特殊配置這些錯誤的節點.

咱們應該用的最多的就是attr這個節點,以下:

 <attr path="/api/namespace/object[@cname='GtkWindow']/signal[@name='ActivateDefault']" name="name">DefaultActivated</attr>

 

咱們可使用它來更改任何現有屬性的值,或將新屬性插入API文件中的任何元素。

<attr>元素有兩個屬性path和name,使用path來標識要更改的元素,並使用name來標識元素上的屬性名稱。

固然,各位若是想更深刻的瞭解這個能夠把java變成C#的神奇神器..能夠到以下地址查看

http://www.mono-project.com/docs/gui/gtksharp/gapi/

 

寫在最後

結束了..Xamarin說難,其實也不難,說簡單,其實你須要瞭解的東西仍是挺多的.

但願開源出來的項目模版能幫到你們..

最後,真誠的感謝你們對本系列的支持.

 

個人博客即將同步至騰訊雲+社區,邀請你們一同入駐。

相關文章
相關標籤/搜索