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

相关文章

来自专栏琯琯博客

docker-resources资源汇集相关项目博文

docker资源汇总。英文版本链接 资源汇集 书籍 第一本Docker书 (7.4分) Docker —— 从入门到实践 (内容一般) The Docker B...

3297
来自专栏软件开发

磁盘操作系统(DOS)

一、概要 Disk Operation System(DOS)即磁盘操作系统,与win7一样是一个操作系统,字符界面,单用户,单任务。 dos,是磁盘操作系统的...

2008
来自专栏DeveWork

Mac OS X巧用AppleScript 制作网络位置切换自动化脚本(自动配置PAC 文件)

事情是这样的,自带的Macbook Air 在实习单位入的是办公网,办公网走自动代理(需要配置PAC 文件)。同时回来宿舍或家里需要民用的宽带网络。切换的时候出...

2965
来自专栏coding

yii2实战之初见端倪PHP框架大PK安装yii2项目初始化配置服务小结

1155
来自专栏张善友的专栏

WiX和DTF介绍

Windows Installer XML(WiX) 这里所介绍的是Wix 3.0版本,目前还是beta. Wix 是 Windows Installer XM...

1748
来自专栏bboysoul

vagrant安装和使用

在一次偶然的机会我碰到了vagrant,Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境,总之简单的说vagrant就是一款管理虚拟机的工具

543
来自专栏落影的专栏

iOS开发笔记(四)

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

3457
来自专栏安富莱嵌入式技术分享

【安富莱二代示波器教程】第7章 示波器设计—波形滑动浏览

类似手机的滑动功能用在示波器上还是比较实用的,可以用来调节波形位置和滑动浏览波形的存储记录。

522
来自专栏CSDN技术头条

Mark!Android最佳的开源库集锦

工欲善其事,必先利其器。一个好的开发库可以快速提高开发者的工作效率,甚至让开发工作变得简单。本文收集了大量的Android开发库,快来切磋一下,到底哪一个最适合...

1827
来自专栏向治洪

Android仿网易云音乐播放界面

概述 网易云音乐是一款非常优秀的音乐播放器,尤其是播放界面,使用唱盘机风格,显得格外古典优雅。这里抛砖引玉,原文地址:http://www.jianshu.co...

2816

扫码关注云+社区