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


前言

系列目錄

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

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

可以Star一下,隨意 - -

說點什么..

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

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

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說難,其實也不難,說簡單,其實你需要了解的東西還是挺多的.

希望開源出來的項目模版能幫到大家..

最后,真誠的感謝大家對本系列的支持.

 

我的博客即將同步至騰訊雲+社區,邀請大家一同入駐。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM