关于xamarin:MASA-MAUI-Plugin-九Android相册多选照片使用Android-Jetpack套件库

背景MAUI的呈现,赋予了宽广.Net开发者开发多平台利用的能力,MAUI 是Xamarin.Forms演变而来,然而相比Xamarin性能更好,可扩展性更强,构造更简略。然而MAUI对于平台相干的实现并不残缺。所以MASA团队发展了一个实验性我的项目,意在对微软MAUI的补充和扩大 我的项目地址https://github.com/BlazorComp... 每个性能都有独自的demo演示我的项目,思考到app安装文件体积(尽管MAUI曾经集成裁剪性能,然而该性能对于代码自身有影响),届时每一个性能都会以独自的nuget包的模式提供,不便测试,当初我的项目才刚刚开始,然而置信很快就会有能够交付的内容啦。 前言本系列文章面向挪动开发小白,从零开始进行平台相干性能开发,演示如何参考平台的官网文档应用MAUI技术来开发相应性能。 介绍Jetpack 蕴含一系列 Android 库,它们都采纳最佳做法并在 Android 利用中提供向后兼容性。 https://developer.android.goo...上一篇咱们是通过Intent实现的,明天咱们用Jetpack 实现相册的多选性能。 一、实现形式能够应用以下 activity 后果协定来启动照片选择器:PickVisualMedia,用于抉择单张图片或单个视频。PickMultipleVisualMedia,用于抉择多张图片或多个视频。咱们的需要是能够多选照片,咱们次要介绍PickMultipleVisualMedia的应用办法。咱们先看一下JAVA的示例代码 JAVA代码// Registering Photo Picker activity launcher with multiple selects (5 max in this example)ActivityResultLauncher<PickVisualMediaRequest> pickMultipleMedia = registerForActivityResult(new PickMultipleVisualMedia(5), uris -> { // Callback is invoked after the user selects media items or closes the // photo picker. if (!uris.isEmpty()) { Log.d("PhotoPicker", "Number of items selected: " + uris.size()); } else { Log.d("PhotoPicker", "No media selected"); }});// For this example, launch the photo picker and allow the user to choose images// and videos. If you want the user to select a specific type of media file,// use the overloaded versions of launch(), as shown in the section about how// to select a single media item.pickMultipleMedia.launch(new PickVisualMediaRequest.Builder() .setMediaType(PickVisualMedia.ImageAndVideo.INSTANCE) .build());这里先介绍一下registerForActivityResult ...

March 1, 2023 · 2 min · jiezi

关于xamarin:MASA-MAUI-Plugin-八Android相册多选照片Intent-方式

背景MAUI的呈现,赋予了宽广.Net开发者开发多平台利用的能力,MAUI 是Xamarin.Forms演变而来,然而相比Xamarin性能更好,可扩展性更强,构造更简略。然而MAUI对于平台相干的实现并不残缺。所以MASA团队发展了一个实验性我的项目,意在对微软MAUI的补充和扩大 我的项目地址https://github.com/BlazorComp... 每个性能都有独自的demo演示我的项目,思考到app安装文件体积(尽管MAUI曾经集成裁剪性能,然而该性能对于代码自身有影响),届时每一个性能都会以独自的nuget包的模式提供,不便测试,当初我的项目才刚刚开始,然而置信很快就会有能够交付的内容啦。 前言本系列文章面向挪动开发小白,从零开始进行平台相干性能开发,演示如何参考平台的官网文档应用MAUI技术来开发相应性能。 介绍我的项目中有须要从相册多选图片的需要,MAUI提供的MediaPicker.PickPhotoAsync无多选性能,FilePicker.PickMultipleAsync尽管能够实现多选,然而多选文件须要长按,而且没有预览和返回按钮,用户交互成果不好。作为安卓开发小白,自己目前找到两种UI交互良好而且不须要定制选取界面的办法和大家分享。 一、MAUI实现形式演示成果MediaPicker.Default.PickPhotoAsync 成果FilePicker.Default.PickMultipleAsync 成果 二、实现形式思路https://developer.android.goo... 咱们参考一下官网文档,上面为抉择多张照片或者多个视频的示例 JAVA代码// Launches photo picker in multi-select mode.// This means that user can select multiple photos/videos, up to the limit// specified by the app in the extra (10 in this example).final int maxNumPhotosAndVideos = 10;Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES);intent.putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, maxNumPhotosAndVideos);startActivityForResult(intent, PHOTO_PICKER_MULTI_SELECT_REQUEST_CODE);解决照片选择器后果 JAVA代码// onActivityResult() handles callbacks from the photo picker.@Overrideprotected void onActivityResult( int requestCode, int resultCode, final Intent data) { if (resultCode != Activity.RESULT_OK) { // Handle error return; } switch(requestCode) { case REQUEST_PHOTO_PICKER_SINGLE_SELECT: // Get photo picker response for single select. Uri currentUri = data.getData(); // Do stuff with the photo/video URI. return; case REQUEST_PHOTO_PICKER_MULTI_SELECT: // Get photo picker response for multi select for (int i = 0; i < data.getClipData().getItemCount(); i++) { Uri currentUri = data.getClipData().getItemAt(i).getUri(); // Do stuff with each photo/video URI. } return; }}限定抉择内容范畴默认状况下,照片选择器会既显示照片又显示视频。您还能够在 setType() 办法中设置 MIME 类型,以便按“仅显示照片”或“仅显示视频”进行过滤 ...

February 22, 2023 · 4 min · jiezi

关于xamarin:MASA-MAUI-Plugin-五Android-指纹识别

背景MAUI的呈现,赋予了宽广Net开发者开发多平台利用的能力,MAUI 是Xamarin.Forms演变而来,然而相比Xamarin性能更好,可扩展性更强,构造更简略。然而MAUI对于平台相干的实现并不残缺。所以MASA团队发展了一个实验性我的项目,意在对微软MAUI的补充和扩大, 我的项目地址https://github.com/BlazorComp... 每个性能都有独自的demo演示我的项目,思考到app安装文件体积(尽管MAUI曾经集成裁剪性能,然而该性能对于代码自身有影响),届时每一个性能都会以独自的nuget包的模式提供,不便测试,当初我的项目才刚刚开始,然而置信很快就会有能够交付的内容啦。 前言本系列文章面向挪动开发小白,从零开始进行平台相干性能开发,演示如何参考平台的官网文档应用MAUI技术来开发相应性能。 介绍在 API 级别 23 (Android 6.0) 设施上引入指纹扫描仪为应用程序提供了传统的用户名/明码用户身份验证的代替办法。 相较于用户名和明码,采纳指纹对用户进行身份验证使应用程序安全性的实现更具隐衷性,之后 API-28(Android9.0) 中增加了生物辨认身份验证Biometric,减少了人脸认证相干性能。咱们明天探讨的只波及指纹认证,思考到兼容性问题采纳API - 23 (Android 6.0) 版本提供的 FingerprintManager API,通过测试能够在Android 6.0 -11.0中失常工作,如果您须要人脸验证相干性能请参考链接: androidx.biometric,实现细节与本文相似。 思路咱们先看一下Android 的指纹验证办法外围的指纹治理类FingerprintManagerCompat ,fingerprintManager是通过FingerprintManagerCompat.from(Context context)来创立的。 JAVA代码FingerprintManagerCompat fingerprintManager= FingerprintManagerCompat.from(Context context);1、查看资格:1、须要查看设施是否反对指纹。2、须要查看设施是否受爱护 - 用户必须应用屏幕锁爱护设施。 如果用户未应用屏幕锁爱护设施,然而以后应用程序对于安全性要求很高,则应告诉用户必须配置屏幕锁。3、须要检查用户是否曾经注册指纹 - 用户必须至多有一个指纹已注册到操作系统。 此权限查看应在每次尝试进行身份验证之前进行,因为用户有可能随时勾销指纹在MAUI blazor我的项目的Platforms->Android文件夹增加MasaMauiFingerprintService.cs 类,增加如下两个办法 public static class MasaMauiFingerprintService { private static FingerprintManagerCompat fingerprintManager = FingerprintManagerCompat.From(Android.App.Application.Context); /// <summary> /// Check eligibility /// </summary> /// <returns>error message</returns> public static async Task<string> CheckingEligibility() { // 1、Check if your hardware supports it if (!fingerprintManager.IsHardwareDetected) { return "IsHardwareDetected"; } // 2、Check if the user is using a screen lock // KeyguardManager: Lock screen management class var keyguardManager = Android.App.Application.Context.GetSystemService(Context.KeyguardService) as KeyguardManager; if (!keyguardManager.IsKeyguardSecure) { return "The device does not have a screen lock set"; } // 3、Check if at least one fingerprint is registered if (!fingerprintManager.HasEnrolledFingerprints) { return "The device does not have a fingerprint set, please set at least one fingerprint"; } var granted = await CheckAndRequestFingerprintPermission(); if (!granted) { return "Permissions not granted"; } return string.Empty; } /// <summary> /// Permission check /// </summary> /// <returns></returns> private static async Task<bool> CheckAndRequestFingerprintPermission() { var status = await Permissions.CheckStatusAsync<AndroidFingerprintPermissions>(); if (status == PermissionStatus.Granted) return true; status = await Permissions.RequestAsync<AndroidFingerprintPermissions>(); if (status == PermissionStatus.Granted) return true; return false; } /// <summary> /// Permissions required for fingerprints /// </summary> private class AndroidFingerprintPermissions : Permissions.BasePlatformPermission { public override (string androidPermission, bool isRuntime)[] RequiredPermissions => new List<(string androidPermission, bool isRuntime)> { (global::Android.Manifest.Permission.UseFingerprint, true), }.ToArray(); } }CheckingEligibility顺次查看设施是否反对蓝牙(IsHardwareDetected)、设施是否有屏幕锁(IsKeyguardSecure)这里须要一个KeyguardManager的类帮忙查看、是否注册了至多一个指纹(HasEnrolledFingerprints)、是否对立了应用指纹相干权限。 ...

November 8, 2022 · 3 min · jiezi

关于xamarin:MASA-MAUI-iOS如何绑定微信

背景MAUI的呈现,赋予了宽广Net开发者开发多平台利用的能力,MAUI 是Xamarin.Forms演变而来,然而相比Xamarin性能更好,可扩展性更强,构造更简略。然而MAUI对于平台相干的实现并不残缺。所以MASA团队发展了一个实验性我的项目,意在对微软MAUI的补充和扩大 我的项目地址https://github.com/BlazorComp... 每个性能都有独自的demo演示我的项目,思考到app安装文件体积(尽管MAUI曾经集成裁剪性能,然而该性能对于代码自身有影响),届时每一个性能都会以独自的nuget包的模式提供,不便测试,当初我的项目才刚刚开始,然而置信很快就会有能够交付的内容啦。 前言本系列文章面向挪动开发小白,从零开始进行平台相干性能开发,演示如何参考平台的官网文档应用MAUI技术来开发相应性能。 介绍App开发中难免不了要对接第三方平台,这些平台官网也提供了SDK供开发者应用。 对于Android和iOS平台而言,只须要下载官网的SDK,依照官网阐明文档进行集成就能够轻松实现了。 然而对于MAUI来说,并没有官网的SDK,这个时候就须要咱们绑定实用于.NET MAUI 的本机库。 本文次要介绍在MAUI中如何实现iOS绑定库,相比拟Android绑定,iOS绑定会麻烦些,接下里让咱们一步步在MAUI中实现iOS微信SDK的绑定。 *以下过程,均在macOS上操作 前置环境筹备Xcode 13.4.1Visual Studio for mac 2022装置Sharpie, Shapie 是一个十分好用的转换工具,它反对在 macOS 下对 Objective-C 的库的转换。通过 Sharpie 能够对库文件给出的头文件进行转换实现 C# 的绑定。通过 Sharpie 工具生成 C# 调用的接口下载微信iOS SDK,关上后外面有libWeChatSDK.a的动态库和三个头文件(.h) 咱们须要将这几个.h文件转换为C#文件,这时候就须要用到Objective Sharpie工具 sharpie bind -output=WeChatSDK.IOS -namespace=WeChatSDK.IOS -sdk=iphoneos15.5 -scope [绝对路径]/OpenSDK1.9.6 [绝对路径]/OpenSDK1.9.6/*.h 这里须要留神指定-scope。 -scope如果没有参数,Objective Sharpie 将尝试为导入的任何 iOS SDK 标头生成绑定,例如#import <UIKit.h>,生成一个微小的定义文件,在编译绑定我的项目时可能会生成谬误。应用 -scope 参数集时,Objective Sharpie 不会为作用域文件夹之外的任何标头生成绑定。 转换胜利后,会在你指定的文件夹生成ApiDefinitions.cs和StructsAndEnums.cs,StructsAndEnums.cs 对应的是一些常量和枚举类型, ApiDefinitions.cs 对应的是一些接口和办法。 创立 MAUI 的 iOS 绑定我的项目通过命令行创立MAUI的iOS绑定库 dotnet new iosbinding -o WeChatSDK.IOS将生成的ApiDefinitions.cs和StructsAndEnums.cs替换掉我的项目对应内的文件并对.csproj调整 ...

October 27, 2022 · 1 min · jiezi

关于xamarin:MASA-MAUI-Plugin-IOS蓝牙低功耗三蓝牙扫描

我的项目背景MAUI的呈现,赋予了宽广Net开发者开发多平台利用的能力,MAUI 是Xamarin.Forms演变而来,然而相比Xamarin性能更好,可扩展性更强,构造更简略。然而MAUI对于平台相干的实现并不残缺。所以MASA团队发展了一个实验性我的项目,意在对微软MAUI的补充和扩大,我的项目地址:https://github.com/BlazorComp... 每个性能都有独自的demo演示我的项目,思考到app安装文件体积(尽管MAUI曾经集成裁剪性能,然而该性能对于代码自身有影响),届时每一个性能都会以独自的nuget包的模式提供,不便测试,当初我的项目才刚刚开始,然而置信很快就会有能够交付的内容啦。 前言本系列文章面向挪动开发小白,从零开始进行平台相干性能开发,演示如何参考平台的官网文档应用MAUI技术来开发相应性能。 介绍之前两篇文章咱们实现了安卓蓝牙BLE的相干性能,本文咱们将IOS的BLE性能实现一下。,思考到Swift语法对于c#开发人员更敌对,本文示例代码参考Swift,相干代码来自苹果开发者官网https://developer.apple.com/d... 开发步骤批改我的项目在Masa.Blazor.Maui.Plugin.Bluetooth我的项目中的Platforms->iOS文件夹下,增加一个局部类MasaMauiBluetoothService,在安卓中有BluetoothManager,在ios中对应的是CBCentralManager,然而不同有安卓还有个适配器Adapter的概念,在ios中对于设施扫描、连贯和治理外围设备的对象,都是通过CBCentralManager间接治理的,咱们看一下他的初始化办法 init( delegate: CBCentralManagerDelegate?, queue: DispatchQueue?, options: [String : Any]? = nil)delegate:接管核心事件的委托。相当于咱们在装置中实现的DevicesCallback queue:用于调度核心角色事件的调度队列。如果该值为 nil,则地方管理器将应用主队列分派核心角色事件。这个咱们能够简略的了解为和安卓的UI线程或者后盾线程对应,更详尽的阐明请参考https://developer.apple.com/d... options:配置信息,咱们这里只用到了ShowPowerAlert,代表蓝牙设施如果不可用,给用户提示信息。就好比你用了不符合标准的数据线,iphone会给你提醒是一个意思。 public static partial class MasaMauiBluetoothService { private static BluetoothDelegate _delegate = new(); public static CBCentralManager _manager = new CBCentralManager(_delegate, DispatchQueue.DefaultGlobalQueue, new CBCentralInitOptions { ShowPowerAlert = true, }); private sealed class BluetoothDelegate : CBCentralManagerDelegate { private readonly EventWaitHandle _eventWaitHandle = new(false, EventResetMode.AutoReset); public List<BluetoothDevice> Devices { get; } = new(); public void WaitOne() { Task.Run(async () => { await Task.Delay(5000); _eventWaitHandle.Set(); }); _eventWaitHandle.WaitOne(); } public override void DiscoveredPeripheral(CBCentralManager central, CBPeripheral peripheral, NSDictionary advertisementData, NSNumber RSSI) { System.Diagnostics.Debug.WriteLine("OnScanResult"); if (!Devices.Contains(peripheral)) { Devices.Add(peripheral); } } [Preserve] public override void UpdatedState(CBCentralManager central) { } } }咱们将MasaMauiBluetoothService批改为动态类,咱们自定义的BluetoothDelegate 继承自CBCentralManagerDelegate,篇幅问题咱们这里先只重写DiscoveredPeripheral和 UpdatedState,咱们这次的演示不须要实现UpdatedState,然而这里的重写必须先放上去,否则调试过程会呈现上面的报错 ...

October 11, 2022 · 3 min · jiezi

关于xamarin:MASA-MAUI-Plugin-安卓蓝牙低功耗二蓝牙通讯

我的项目背景MAUI的呈现,赋予了宽广Net开发者开发多平台利用的能力,MAUI 是Xamarin.Forms演变而来,然而相比Xamarin性能更好,可扩展性更强,构造更简略。然而MAUI对于平台相干的实现并不残缺。所以MASA团队发展了一个实验性我的项目,意在对微软MAUI的补充和扩大 我的项目地址 https://github.com/BlazorComp... 每个性能都有独自的demo演示我的项目,思考到app安装文件体积(尽管MAUI曾经集成裁剪性能,然而该性能对于代码自身有影响),届时每一个性能都会以独自的nuget包的模式提供,不便测试,当初我的项目才刚刚开始,然而置信很快就会有能够交付的内容啦。 前言本系列文章面向挪动开发小白,从零开始进行平台相干性能开发,演示如何参考平台的官网文档应用MAUI技术来开发相应性能。 介绍上一篇文章咱们实现了蓝牙BLE的扫描性能,这里咱们持续实现通信性能。本文JAVA相干代码均来自安卓开发者官网 开发步骤连贯到 GATT 服务器通用属性配置文件Generic Attribute Profile简称GATT。GATT定义了属性类型并规定了如何应用,包含了一个数据传输和存储的框架和一些基本操作。两头蕴含了一些概念如个性characteristics,服务services等。同时还定义了发现服务,个性和服务间的连贯的处理过程,也包含读写个性值。咱们应用移远的FC410举例 通过nRF connect工具能够查看设施的配置,该设施有一个前缀为FFFF的主服务,该服务下有一个前缀为FF01的特色,该特色具备告诉Notify 和写入Write两种属性(如果有Notify,那么就会有描述符)。换句话说咱们能够通过这个特色给设施发送数据,而且能够通过订阅该特征值变动事件,来获取设施通过蓝牙的返回信息。与 BLE 设施交互的第一步便是连贯到 GATT 服务器。更具体地说,是连贯到设施上的 GATT 服务器。咱们先看一下JAVA的实现形式 JAVA代码bluetoothGatt = device.connectGatt(this, false, gattCallback);连贯到 BLE 设施上的 GATT 服务器,须要应用 connectGatt() 办法。此办法采纳三个参数:一个 Context 对象、autoConnect(布尔值,批示是否在可用时主动连贯到 BLE 设施),以及对 BluetoothGattCallback 的援用。该办法 BluetoothGatt 实例,而后可应用该实例执行 GATT 客户端操作。调用方(Android 利用)是 GATT 客户端。BluetoothGattCallback 用于向客户端传递后果(例如连贯状态),以及任何进一步的 GATT 客户端操作。咱们再看一下BluetoothGattCallback 的JAVA实现 JAVA 代码// Various callback methods defined by the BLE API. private final BluetoothGattCallback gattCallback = new BluetoothGattCallback() { @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { String intentAction; if (newState == BluetoothProfile.STATE_CONNECTED) { intentAction = ACTION_GATT_CONNECTED; connectionState = STATE_CONNECTED; broadcastUpdate(intentAction); Log.i(TAG, "Connected to GATT server."); Log.i(TAG, "Attempting to start service discovery:" + bluetoothGatt.discoverServices()); } else if (newState == BluetoothProfile.STATE_DISCONNECTED) { intentAction = ACTION_GATT_DISCONNECTED; connectionState = STATE_DISCONNECTED; Log.i(TAG, "Disconnected from GATT server."); broadcastUpdate(intentAction); } } @Override // New services discovered public void onServicesDiscovered(BluetoothGatt gatt, int status) { if (status == BluetoothGatt.GATT_SUCCESS) { broadcastUpdate(ACTION_GATT_SERVICES_DISCOVERED); } else { Log.w(TAG, "onServicesDiscovered received: " + status); } } @Override // Result of a characteristic read operation public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { if (status == BluetoothGatt.GATT_SUCCESS) { broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic); } } ...因为日后还须要实现其余平台的性能,咱们的想法是所有公共局部都放到我的项目根目录,平台相干的实现,放到对应Platforms目录下对应平台的文件夹内,而后通过分部类的形式组织类构造。平台相干的办法起名以Platform为前缀。咱们先在Masa.Blazor.Maui.Plugin.Bluetooth我的项目Platforms->Android目录新建一个名称为RemoteGattServer.android.cs的分部类,而后增加初始化办法和BluetoothGattCallback ...

September 22, 2022 · 5 min · jiezi

关于xamarin:Xamarin-联合创始人-Miguel-de-Icaza-将离开微软

3 月 2 日,驰名的开源倡导者和开发者 Miguel de Icaza 向 ZDNnet 证实:他曾经决定来到微软,将在跳槽之前劳动一段时间。2016 年微软收买 Xamarin,此时作为联结创始人的 De Icaza 退出微软。 自从 De Icaza 的共事、前Xamarin首席执行官Nat Friedman于2021年11月来到微软以来,就有人猜想 De Icaza  也会来到微软。Nat Friedman 曾是微软GitHub部门的首席执行官。 Friedman说:去年年底,他决定回到守业的本源。 De Icaza 退出微软刚刚超过六年。最近,他始终在 ONNX 团队中从事各种人工智能我的项目。ONNX 即开放式神经网络替换,是一种正在倒退的机器学习模型的规范格局,由微软、Meta和亚马逊提倡。De Icaza 与团队单干,让 ONNX 在 Android 和 iOS 上运行,以反对应用 Xamarin 的挪动开发者。 当被问到下一步的打算时,De Icaza 示意:“孩子们上学时我打算劳动一下,而后再和他们一起度假。生存在这个行业就像糖果店里的孩子--产生了太多的事件,有太多的抉择。所以我想花一些工夫品味一些糖果,而后决定我想买哪一种。” De Icaza 示意,他有大概 99% 的可能走向守业之路。“如果我想为大公司工作,我就会留在这里(微软)。这里太棒了,我学到了很多货色,这很好,但我的确思念守业公司的世界,思念建设和治理一个团队。这是我在微软负责这个角色没有做过的事件。 目前,De Icaza 尚未走漏具体的卸任日期以及相干的接任人员。 对于 XamarinXamarin 始创于 2011 年,旨在使挪动开发变得迅捷和简略。Xamarin 的产品简化了针对多种平台的利用开发,包含 iOS、Android、Windows Phone 和 Mac App。Xamarin 由许多驰名的开源社区开发者创建和参加,而且也是 Mono 我的项目的主导者——C# 与 ·NET 框架的开源、跨平台实现。

March 5, 2022 · 1 min · jiezi