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

简介: 原文:C#使用Xamarin开发可移植移动应用终章(11.获取设备信息与常用组件,开源一个可开发模版.)前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.
原文: 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说难,其实也不难,说简单,其实你需要了解的东西还是挺多的.

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

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

 

我的博客即将同步至腾讯云+社区,邀请大家一同入驻。

目录
相关文章
|
23天前
|
JSON C# 开发者
💡探索C#语言进化论:揭秘.NET开发效率飙升的秘密武器💼
【8月更文挑战第28天】C#语言凭借其强大的功能与易用性深受开发者喜爱。伴随.NET平台演进,C#持续引入新特性,如C# 7.0的模式匹配,让处理复杂数据结构更直观简洁;C# 8.0的异步流则使异步编程更灵活高效,无需一次性加载全部数据至内存。通过示例展示了模式匹配简化JSON解析及异步流实现文件逐行读取的应用。此外,C# 8.0还提供了默认接口成员和可空引用类型等特性,进一步提高.NET开发效率与代码可维护性。随着C#的发展,未来的.NET开发将更加高效便捷。
39 1
|
20天前
|
Android开发 iOS开发 C#
Xamarin:用C#打造跨平台移动应用的终极利器——从零开始构建你的第一个iOS与Android通用App,体验前所未有的高效与便捷开发之旅
【8月更文挑战第31天】Xamarin 是一个强大的框架,允许开发者使用单一的 C# 代码库构建高性能的原生移动应用,支持 iOS、Android 和 Windows 平台。作为微软的一部分,Xamarin 充分利用了 .NET 框架的强大功能,提供了丰富的 API 和工具集,简化了跨平台移动应用开发。本文通过一个简单的示例应用介绍了如何使用 Xamarin.Forms 快速创建跨平台应用,包括设置开发环境、定义用户界面和实现按钮点击事件处理逻辑。这个示例展示了 Xamarin.Forms 的基本功能,帮助开发者提高开发效率并实现一致的用户体验。
42 0
|
20天前
|
开发者 iOS开发 C#
Uno Platform 入门超详细指南:从零开始教你打造兼容 Web、Windows、iOS 和 Android 的跨平台应用,轻松掌握 XAML 与 C# 开发技巧,快速上手示例代码助你迈出第一步
【8月更文挑战第31天】Uno Platform 是一个基于 Microsoft .NET 的开源框架,支持使用 C# 和 XAML 构建跨平台应用,适用于 Web(WebAssembly)、Windows、Linux、macOS、iOS 和 Android。它允许开发者共享几乎全部的业务逻辑和 UI 代码,同时保持原生性能。选择 Uno Platform 可以统一开发体验,减少代码重复,降低开发成本。安装时需先配置好 Visual Studio 或 Visual Studio for Mac,并通过 NuGet 或官网下载工具包。
24 0
|
20天前
|
前端开发 开发者 Apache
揭秘Apache Wicket项目结构:如何打造Web应用的钢铁长城,告别混乱代码!
【8月更文挑战第31天】Apache Wicket凭借其组件化设计深受Java Web开发者青睐。本文详细解析了Wicket项目结构,帮助你构建可维护的大型Web应用。通过示例展示了如何使用Maven管理依赖,并组织页面、组件及业务逻辑,确保代码清晰易懂。Wicket提供的页面继承、组件重用等功能进一步增强了项目的可维护性和扩展性。掌握这些技巧,能够显著提升开发效率,构建更稳定的Web应用。
49 0
|
2月前
|
SQL 开发框架 前端开发
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
|
3月前
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
66 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
2月前
|
存储 缓存 C#
C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏
C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏
C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏
|
3月前
|
关系型数据库 C# 数据库
技术笔记:MSCL超级工具类(C#),开发人员必备,开发利器
技术笔记:MSCL超级工具类(C#),开发人员必备,开发利器
39 3
|
3月前
|
C# 图形学 C++
使用vscode开发C#+unity没有代码提示问题
使用vscode开发C#+unity没有代码提示问题
50 0
使用vscode开发C#+unity没有代码提示问题
|
2月前
|
机器学习/深度学习 算法 搜索推荐
一个开源且全面的C#算法实战教程
一个开源且全面的C#算法实战教程