VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • Xamarin.Forms客户端第一版(2)

authotization.Item1; } /// <summary> /// Request contact asynchronously. This method is called by the interface. /// </summary> /// <param name="cancelToken"></param> /// <returns></returns> public async Task<IList<Contact>> RetrieveContactsAsync(CancellationToken? cancelToken = null) { requestStop = false; if (!cancelToken.HasValue) cancelToken = CancellationToken.None; // We create a TaskCompletionSource of decimal var taskCompletionSource = new TaskCompletionSource<IList<Contact>>(); // Registering a lambda into the cancellationToken cancelToken.Value.Register(() => { // We received a cancellation message, cancel the TaskCompletionSource.Task requestStop = true; taskCompletionSource.TrySetCanceled(); }); _isLoading = true; var task = LoadContactsAsync(); // Wait for the first task to finish among the two var completedTask = await Task.WhenAny(task, taskCompletionSource.Task); _isLoading = false; return await completedTask; } /// <summary> /// Load contacts asynchronously, fact reading method of address book. /// </summary> /// <returns></returns> async Task<IList<Contact>> LoadContactsAsync() { IList<Contact> contacts = new List<Contact>(); var hasPermission = await RequestPermissionAsync(); if (hasPermission) { NSError error = null; var keysToFetch = new[] { CNContactKey.PhoneNumbers, CNContactKey.GivenName, CNContactKey.FamilyName, CNContactKey.EmailAddresses, CNContactKey.ImageDataAvailable, CNContactKey.ThumbnailImageData }; var request = new CNContactFetchRequest(keysToFetch: keysToFetch); request.SortOrder = CNContactSortOrder.GivenName; using (var store = new CNContactStore()) { var result = store.EnumerateContacts(request, out error, new CNContactStoreListContactsHandler((CNContact c, ref bool stop) => { string path = null; if (c.ImageDataAvailable) { path = path = Path.Combine(Path.GetTempPath(), $"{ThumbnailPrefix}-{Guid.NewGuid()}"); if (!File.Exists(path)) { var imageData = c.ThumbnailImageData; imageData?.Save(path, true); } } var contact = new Contact() { Name = string.IsNullOrEmpty(c.FamilyName) ? c.GivenName : $"{c.GivenName} {c.FamilyName}", Image = path, PhoneNumbers = c.PhoneNumbers?.Select(p => p?.Value?.StringValue).ToArray(), Emails = c.EmailAddresses?.Select(p => p?.Value?.ToString()).ToArray(), }; if (!string.IsNullOrWhiteSpace(contact.Name)) { OnContactLoaded?.Invoke(this, new ContactEventArgs(contact)); contacts.Add(contact); } stop = requestStop; })); } } return contacts; } } }

2.2.3.2. Info.plist

联系人权限请求说明
Info.plist

2.3. 应用本地化

使用资源文件实现本地化,目前只做了中、英文。

资源文件如下:

指定默认区域性

要使资源文件可正常使用,应用程序必须指定 NeutralResourcesLanguage。 在共享项目中,应自定义 AssemblyInfo.cs 文件以指定默认区域性 。 以下代码演示如何在 AssemblyInfo.cs 文件中将 NeutralResourcesLanguage 设置为 zh-CN (摘自官方文档:https://docs.microsoft.com/zh-cn/samples/xamarin/xamarin-forms-samples/usingresxlocalization/,后经测试,注释下面这段代码也能正常本地化):

[assembly: NeutralResourcesLanguage("zh-CN")]

XAML中使用

引入资源文件命名空间

xmlns:resources="clr-namespace:TerminalMACS.Clients.App.Resx"

具体使用如

<Label Text="{x:Static resources:AppResource.ClientName_AboutPage}" FontAttributes="Bold"/>

3. 关于TerminalMACS及本客户端

3.1. TermainMACS

多终端资源管理与检测系统,包含多个子进程模块,目前只开发了Xamarin.Forms客户端,下一步开发服务端,使用 .NET 5 Web API开发,基于Abp vNext搭建。

3.2. Xamarin.Forms客户端

作为TerminalMACS系统的一个子进程模块,目前只开发了手机基本信息获取、联系人信息获取、本地化功能,后续开发服务端时,会配合添加通信功能,比如连接服务端验证、主动推送已获取资源等。

3.3. 关于项目开源

    1. 开源项目地址:https://github.com/dotnet9/TerminalMACS
    1. 官方网站:https://terminalmacs.com
    1. 合作网站:https://dotnet9.com

相关教程