C#使用Xamarin开发可移植移动应用终章(11.获取设备信息与常用组件,开源一个可开发模版.)

前言

源码地址: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说难,其实也不难,说简单,其实你需要了解的东西还是挺多的.

希望开源出来的项目模版能帮到大家..

最后,真诚的感谢大家对本系列的支持.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Brian

Mac 配置终端环境

Mac 配置终端开发环境 ---- 概述 作为一个服务端开发人员基本上都是通过终端和服务器打交道,所以一个好个开发人员那么他的终端配置也是高效的。“工欲善事必先...

37111
来自专栏程序员的SOD蜜

OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client

一、概念介绍 1.1,什么是OData? 还是看OData官网的简单说明: An open protocol to allow the creation and...

3595
来自专栏小狼的世界

Linux下数据备份的一般方法

一个应用中有很多的重要数据,为了在数据灾难发生后我们能够及时、迅速、准确的恢复我们的应用到一个比较合适的位置,我们必须定期的对我们的数据资料进行备份,今天所要讨...

941
来自专栏前端新视界

构建具有用户身份认证的 React + Flux 应用程序

原文:Build a React + Flux App with User Authentication 译者:nzbin 译者的话:这是一篇内容详实的 Rea...

3987
来自专栏老马寒门IT

开发者的如何优雅的使用OSX

Mac对于IT开发者来说是最好的开发工具,没有之一。 但是对于大部分人来说,第一个接触的PC操作系统都是Windows系统,此文将带大家优雅的快速学习和使用Ma...

2603
来自专栏葡萄城控件技术团队

Url Rewrite 再说Url 重写

前几天看到园子里一篇关于 Url 重写的文章《获取ISAPI_Rewrite重写后的URL》 , URL-Rewrite 这项技术早已不是一项新技术了,这个话题...

3978
来自专栏张善友的专栏

RazorEngine 3.3 在Mono 3.2上正常运行

RazorEngine 是一个简化的模板引擎基于微软新的Razor 解析引擎, Razor是在 ASP.NET MVC3 和 Web Pages中引入的。Raz...

1839
来自专栏林德熙的博客

resharper 跳转到源代码

resharper 可以使用 ctrl+b 跳转到源代码,但是如果使用库的源代码,那么如何跳转,会显示对象管理器,那么如何让resarper 跳转到源代码

441
来自专栏小狼的世界

SED入门

使用Linux多年,SED和AWK两大神器却始终无法得心应手的来提高自己的工作效率,每每需要查找替换,都要依赖于ST2等一众图形工具,深感愧疚,乃专门抽时间学习...

681
来自专栏以南小隐-数通那些事儿

锐捷设备主程序下升级方法

1324

扫码关注云+社区