原文地址:https://blog.xamarin.com/xamarin-essentials-cross-platform-apis-mobile-apps/

当使用 Xamarin 开发 IOS 和 Android 应用的时候,开发人员通过 C# 可以访问每一个原生平台 API。这些绑定不仅使 C# 平台 API 暴露出来,也添加了强大的 C# 特性,例如 async/await,event,delegate 等。这对开发人员来说是一个巨大的优势,因为他们不需要离开 C# ,无论是写共享业务逻辑,用户界面或者访问原生特性。一个关键的特性是当使用 Xamarin 开发跨平台应用时,开发者从共享代码中经常寻找一种访问共享的原生特性,无需编写他们自己的抽象或者找一个社区创建的开源插件。

一个单一的 API 访问诸如地理定位、传感器、安全存储和更多功能的梦想现在对于用 Xamarin 与 Xamarin.Essentials 创建的任何应用程序来说成为了现实。

Xamarin.Essentials API

在可用的第一个预览版中,Xamarin.Essentials API 提供了从单一跨平台 API 库访问超过25个原生特性的功能,无论用户界面是如何创建的都可以从共享代码中访问。这意味着你可以在一个单一的 Xamarin.Android 应用或者目标为 IOS,Android 和 UWP 的 。Xamarin.Forms 应用中使用 Xamarin.Essentials API。即使它包括了这些特性,仍然充分优化了性能和应用大小最小的影响,因为这个库充分利用了连接器安全的优势。这意味着只有你使用的 API 和特性会包含在你的应用程序中,其余的将在你便宜你的应用程序时被删除。

这个初始跨平台 API 集的预览版本,可以通过 NuGet 安装到你的应用中:

这个初始 API 集是基于 Xamarin 开发人员的反馈,包括他们希望从跨平台 API 库中看到的。随着时间的推移,我们会继续添加更多特性。

入门

在新的或者已经存在的应用程序中开始使用 Xamarin.Essentials API 是很容易的,只需几个简单的步骤:

  1. 打开一个存在的项目或者通过 Visual Studio C# 下的空白应用模板创建一个新的项目(Android,iPhone&iPad 或者 跨平台)。
  2. 添加 Xamarin.Essentials NuGet 包到项目中:
    1. Visual Studio:在解决方案面板中,在解决方案名字上右键并选择管理 NuGet。搜索 Xamarin.Essentials 并安装包到所有项目中,包括 iOS,Android,UWP 和 .NET Standard 库。
    2. Visual Studio for Mac:在解决方案面板中,在解决方案名字上右键并选择 添加 -> 添加 NuGet 包.... 搜索 Xamarin.Essentials 并安装包到所有项目中,包括 iOS,Android,UWP 和 .NET Standard 库。
  3. 在任意 C# 类中添加 Xamarin.Essentials 的引用来引用 API。
    using Xamarin.Essentials;
  4. Xamarin.Essentials 需要在 Android 项目上添加小的附加平台特定的设置来访问特定的特性:
    在 Android 项目 MainLauncher 或者 Activity 启动 Xamarin.Essentials 必须在 OnCreate 方法中初始化:
    Xamarin.Essentials.Platform.Init(this, bundle);

     在 Android Xamarin.Essentials 操作运行时权限必须接受任何 `OnRequestPermissionsResult`。添加下边代码到所有 Activity 类中:
   

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}

就是这样!现在你可以在你的应用中开始使用 Xamarin.Essentials API 了。每个API都有完整的文档,代码段可以复制到您的应用程序中。

更多细节请确认务必阅读我们的完整入门向导

创建一个指南针

在 Microsoft Build 2018 我的一个会议中,我展示了如何结合 Xamarin.Forms 和 Xamarin.Essentials API 在 10分钟内构建一个跨平台指南针。它就像在应用中添加几张指南针图片和少量用户界面一样简单:

<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions> <Image HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
Source="compass.png"/> <Image HorizontalOptions="Center"
VerticalOptions="Center"
Source="arrow.png"
x:Name="ImageArrow"/> <Label Grid.Row="1"
x:Name="LabelInfo"
VerticalOptions="Center"
HorizontalOptions="Center" />
</Grid>

我可以在这个页面的后置代码中使用 Xamarin.Essentials 中的 Compass API 来注册一些事件,当指南针改变并且更新标签文本和图像旋转时只需要几行代码。

using Xamarin.Forms;
using Xamarin.Essentials; namespace MyCompass
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent(); // Register for reading changes
Compass.ReadingChanged += Compass_ReadingChanged;
} void Compass_ReadingChanged(CompassChangedEventArgs e)
{
LabelInfo.Text = $"Heading: {e.Reading.HeadingMagneticNorth}";
ImageArrow.Rotation = e.Reading.HeadingMagneticNorth;
} protected override void OnAppearing()
{
base.OnAppearing();
Compass.Start(SensorSpeed.Ui);
} protected override void OnDisappearing()
{
base.OnDisappearing();
Compass.Stop();
}
}
}

就像这样,一个指南针应用创建完了!你可以在我的 GitHub 上找到完整的源代码和图片

下一步是什么

Xamarin.Essentials 已经经过了严格的测试,但是我们请求你在这个尖端的预览周期内提供反馈。请在你的应用中试用这个库,你在运行中遇到的任何问题请报告到 Xamarin.Essentials 的 GitHub 仓库

我们将此库作为 Xamarin 平台的核心基础部分,并知道它是所有开发人员和应用程序的基础构建模块。因此,我们将会整合 Xamarin.Essentials NuGet 包到 Visual Studio 和 Visual Studio for Mac 内置的每一个 iOS,Android 和 Xamarin.Forms 模板中,所以开发人员可以从项目开始时就访问这些 API。

在线观看

你可以观看到来自 Microsoft Build 2018 我用 Visual Studio 构建移动应用和 Xamarin 会议关于 Xamarin,Xamarin.Forms 和 Xamarin.Essentials 的全面概述。

——这里是个 youtube 视频,反正国内看不了,就假装有吧

(翻译)Xamarin.Essentials: 移动应用的跨平台 API的更多相关文章

  1. (翻译)Xamarin.Essentials 最新预览版的更多跨平台 API

    原文地址:https://blog.xamarin.com/cross-platform-apis-xamarin-essentials-latest-preview/ 在 Microsoft Bui ...

  2. Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用

    通过本文你将学会如下内容: 1,如何使用Xamarin开发跨平台(Windows,Android,iOS)应用. 2,如何使用微软的登录界面登入Microsoft账号. 3,如何使用Outlook邮箱 ...

  3. Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用(后续)

    在[Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用]里面提到了Microsoft 身份认证,其实这也是一大块需要注意的地方,特作为后续补充这些知识点.上章是使用了Microsof ...

  4. Xamarin Essentials教程获取路径文件系统FileSystem

    Xamarin Essentials教程获取路径文件系统FileSystem 文件系统用于管理设备内的各类文件.通过文件系统,应用程序可以创建永久文件和临时文件,也可以获取预先打包的文件,如预设数据库 ...

  5. Xamarin.Android 入门之:Android API版本设置

    一.引言 Xamarin.Android有几个Android API级别设置,确定多个版本的Android应用程序的兼容性.本博客解释了这些设置意味着什么,如何配置它们,以及它们在运行时对您的应用程序 ...

  6. Xamarin Essentials教程打开文件

    Xamarin Essentials教程打开文件 FileSystem类的OpenAppPackageFileAsync()方法可以用来打开App包中特定的文件,其语法形式如下: public sta ...

  7. Xamarin Essentials教程实现数据的传输功能实例

    Xamarin Essentials教程实现数据的传输功能实例 [示例1-1]以下将实现数据的传输功能.代码如下: public async Task ShareUri(string text, st ...

  8. Xamarin Essentials教程构建共享请求

    Xamarin Essentials教程构建共享请求 共享请求类ShareTextRequest可以用于构建复杂形式的数据,用于向其他应用传输.例如,它可以指定共享内容的主题Subject,用于给邮件 ...

  9. Xamarin Essentials教程数据处理传输数据

    Xamarin Essentials教程数据处理传输数据 在移动应用程序中,除了常规的数据处理,还涉及数据存储.数据传输.版本数据多个方面.Xamarin.Essentials组件提供了多个数据处理相 ...

随机推荐

  1. jQuery无法获取隐藏元素(display:none)宽度(width)和高度(height)的新解决方案

    用jQuery写一个通过点击左右图标来翻阅图片的小插件,写好后测试可以正常运行,但是放到Tab中后发现只有第一个Tab中的代码能够正常运行,其它全部罢工了. 用Chrome自带的开发工具一查,发现罢工 ...

  2. ZooKeeper管理员指南——部署与管理ZooKeeper

    1.部署 本章节主要讲述如何部署ZooKeeper,包括以下三部分的内容: 系统环境 集群模式的配置 单机模式的配置 系统环境和集群模式配置这两节内容大体讲述了如何部署一个能够用于生产环境的ZK集群. ...

  3. notify()与notifyAll()

    notify() :随机唤醒一个线程. notifyAll():唤醒等待某个锁的所有任务. 在技术上,可能会有多个任务在所创建的任务上处于wait()状态,调用notifyAll()比只调用notif ...

  4. ZooKeeper入门(四)

    入门:使用ZooKeeper的协调分布式应用 这个文档使你对ZooKeeper快速入门,它主要针对想尝试它的开发者.并且包含简单的单机的ZooKeeper服务的安装说明,一些验证是否运行的命令,和一个 ...

  5. linux包安装,解压,压缩,包管理,环境变量

    linux 包安装,解压,压缩,包管理 centoscentos上有系统包管理器yum yum的配置一般有两种方式,一种是直接配置/etc目录下的yum.conf文件,另外一种是在/etc/yum.r ...

  6. js对数组的常用操作

    在js中对数组的操作是经常遇到的,我呢在这就列一下经常用到的方法 删除数组中的元素: 1.delete方法:delete删除的只是数组元素的值,所占的空间是并没有删除的 代码: var arr=[12 ...

  7. UVA 12716 GCD XOR

    https://vjudge.net/problem/UVA-12716 求有多少对整数(a,b)满足:1<=b<=a<=n,且gcd(a,b)=a XOR b 结论:若gcd(a, ...

  8. Go从入门到精通(持续更新)

    1.0 搭建环境 由于我们 Go官方网站 在我大天朝被和谐了,所以我们只能去 Go语言中文网 来下载了.Go的安装很简单,不像Java还要配置一大堆的东西,选择自己系统的对应版本,下载安装,像安装QQ ...

  9. Spring 与 Quartz 动态配置(数漫江湖)

    因为项目的需求,需要有动态配置计划任务的功能.本文在 Quartz JobBean 中获取配置的 Quartz cronExpression 时间表达式及 Spring Bean 的对象名.方法名并运 ...

  10. 如何创建和销毁对象(Effective Java 第二章)

    最近有在看Effective Java,特此记录下自己所体会到的东西,写篇博文会更加的加深印象,如有理解有误的地方,希望不吝赐教. 这章主题主要是介绍:何时以及如何创建对象,何时以及如何避免创建对象, ...