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 条评论
登录 后参与评论

相关文章

来自专栏BestSDK

微软宣布开源Azure Service Fabric SDK,可在github上获取

微软最近宣布Azure Service Fabric SDK的源代码已经开源。Azure Service Fabric是一个分布式平台,用于微服务的打包、部署和...

3482
来自专栏小白课代表

Microsoft Office 2019 RTM版各版本!几乎等于正式版!!!

Microsoft Office 2019 正式版很快就要发布了,目前最新版为 Office 2019 RTM版,不过仅支持Win10系统。

1.5K8
来自专栏FreeBuf

Windows小工具:LnkDown快捷方式加载Payload

前言 投稿一次,被小编退了,原因是不够扯。我就是小学没毕业的小学生,你让我扯,我去哪跟你扯的天花乱坠啊,使出洪荒之力我就再扯一次吧。还是要感谢下FREEBUF上...

1897
来自专栏遊俠扎彪

无线路由器(SOHO路由器/IP分享器)的常用工作模式

也叫接入点模式,也是最常见的模式,拓扑如下图。

3445
来自专栏张善友的专栏

更强悍的Silverlight: WCF RIA Services

如果你安装了 VS 2010 的 Silverlight 4 开发工具,会发现一项重量级的安装项目,WCF RIA Services,用于Silverlight...

19210
来自专栏Jerry的SAP技术分享

SAP OData编程指南

OData(Open Data Protocol)协议是一个开放的工业标准,用于定义RESTFul API的设计和使用。我的文章标题前加上SAP的前缀,只是为了...

2712
来自专栏张善友的专栏

将我的 Windows Phone 应用程序更新到 Windows Phone 8

[原文发表地址]  Updating my Windows Phone App to Windows Phone 8 [中文原文地址] 将我的 Windows ...

1897
来自专栏.NET开发者社区

(码友推荐)2018-07-20 .NET及相关开发资讯速递

8.基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)

842
来自专栏生信技能树

HiC数据分析实战之Hic-pro

现在才正式开始数据处理实战,其中实战的测试数据,参考基因组以及对应的软件安装都是在第3讲:流程及软件 。看懂了这些准备工作,现在就可以跟我一起来一步步走通Hic...

3172
来自专栏落影的专栏

iOS开发笔记(四)

前言 最近遇到一个苦恼的问题,寻找了漫长的时间才解决。 起因是项目需要fork一个新的分支到新的git,于是把代码复制到新的git,创建git库,然后推送,一...

3617

扫码关注云+社区