WIP app invite: scaffold MAUI Essentials dependency in shared PostIt
Adds Microsoft.Maui.Essentials package and <UseMaui>true</UseMaui> to src/PostIt/PostIt/PostIt.csproj so the shared project can compile code that calls MAUI Essentials APIs (Microsoft.Maui.ApplicationModel.*). Also adds a draft ContactService that wraps Contacts.Default.GetAllAsync() behind a runtime platform check and permission request. WIP caveats: - The portable MAUI Essentials facade compiles on net10.0 but throws NotImplementedInReferenceAssemblyException at runtime when no platform-specific MAUI Essentials binary is loaded. A PostIt.Android project (or equivalent) must reference the Android MAUI Essentials implementation for Contacts.Default.GetAllAsync() to actually work. - On desktop (Linux/macOS/Windows) the API is unsupported by design; ContactService currently throws PlatformNotSupportedException. A desktop stub returning Array.Empty<Contact>() is the likely next step. - No tests yet. The scaffold is unverified at runtime; build passes.
This commit is contained in:
parent
a4792a7a83
commit
c64d11e198
3 changed files with 44 additions and 1 deletions
|
|
@ -14,6 +14,7 @@
|
|||
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.2" />
|
||||
<PackageVersion Include="Material.Avalonia" Version="3.17.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.9" />
|
||||
<PackageVersion Include="Microsoft.Maui.Essentials" Version="10.0.90" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Browser" Version="1.8.0" />
|
||||
<PackageVersion Include="Xamarin.AndroidX.Core.SplashScreen" Version="1.2.0" />
|
||||
</ItemGroup>
|
||||
|
|
|
|||
|
|
@ -3,11 +3,13 @@
|
|||
<TargetFramework>net10.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<UseMaui>true</UseMaui>
|
||||
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
|
||||
<AssemblyVersion>1.0.1.0</AssemblyVersion>
|
||||
<FileVersion>1.0.1.0</FileVersion>
|
||||
<InformationalVersion>1.0.1-5+Branch.main.Sha.0617fc6bda7151c70559d87177e2dcfb1b60995f</InformationalVersion>
|
||||
<Version>1.0.1-5</Version>
|
||||
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<AvaloniaResource Include="Assets\**" />
|
||||
|
|
@ -24,6 +26,7 @@
|
|||
<PackageReference Include="CommunityToolkit.Mvvm" />
|
||||
<PackageReference Include="IdentityModel.OidcClient" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
|
||||
<PackageReference Include="Microsoft.Maui.Essentials" />
|
||||
<ProjectReference Include="../../Yavsc.Abstract/Yavsc.Abstract.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
@ -39,4 +42,4 @@
|
|||
<ItemGroup>
|
||||
<PackageReference Include="GitVersion.MsBuild" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
|
|
|
|||
39
src/PostIt/PostIt/Services/ContactService.cs
Normal file
39
src/PostIt/PostIt/Services/ContactService.cs
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Maui.ApplicationModel.Communication;
|
||||
using Microsoft.Maui.ApplicationModel;
|
||||
using Microsoft.Maui.Devices;
|
||||
|
||||
public class ContactService
|
||||
{
|
||||
public async Task<IEnumerable<Contact>> GetDeviceContactsAsync()
|
||||
{
|
||||
// 1. Ensure the platform supports MAUI Essentials APIs
|
||||
if (DeviceInfo.Current.Platform == DevicePlatform.Unknown)
|
||||
{
|
||||
throw new PlatformNotSupportedException("MAUI Essentials is not available on this platform.");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// 2. Request runtime permission (Required for Android & iOS)
|
||||
var status = await Permissions.RequestAsync<Permissions.ContactsRead>();
|
||||
if (status != PermissionStatus.Granted)
|
||||
{
|
||||
// Permission denied by user
|
||||
return Array.Empty<Contact>();
|
||||
}
|
||||
|
||||
// 3. Fetch all contacts
|
||||
var contactsEnumerable = await Contacts.Default.GetAllAsync();
|
||||
return contactsEnumerable ?? Array.Empty<Contact>();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Handle cross-platform exceptions or logs here
|
||||
System.Diagnostics.Debug.WriteLine($"Error fetching contacts: {ex.Message}");
|
||||
return Array.Empty<Contact>();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue