Avvisa quando manca il permesso della fotocamera
Con il permesso negato "Aggiungi una foto" non faceva nulla: il servizio restituiva null come per un annullamento. Dopo un rifiuto definitivo Android non ripropone la richiesta, quindi il rilevatore restava bloccato senza capire perche'. - AttachedService: la richiesta dei permessi diventa RequestCameraPermissions, usata anche da SelectImageFromCamera; OpenAppSettings apre le impostazioni dell'app. - ModalFormScheda e ModalAddAttached: chiedono i permessi prima di scattare e, se negati, mostrano un avviso con l'azione "Impostazioni". Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
7e1492d118
commit
885b3cc6b6
4 files changed
+51
-2
No files matched your search
@@ -10,12 +10,19 @@ public class AttachedService(ILogger<FileManager> logger) : IAttachedService
|
|||||||
{
|
{
|
||||||
public bool IsCameraAvailable => MediaPicker.Default.IsCaptureSupported;
|
public bool IsCameraAvailable => MediaPicker.Default.IsCaptureSupported;
|
||||||
|
|
||||||
public async Task<AttachedDto?> SelectImageFromCamera()
|
public async Task<bool> RequestCameraPermissions()
|
||||||
{
|
{
|
||||||
var cameraPerm = await Permissions.RequestAsync<Permissions.Camera>();
|
var cameraPerm = await Permissions.RequestAsync<Permissions.Camera>();
|
||||||
var storagePerm = await Permissions.RequestAsync<Permissions.StorageWrite>();
|
var storagePerm = await Permissions.RequestAsync<Permissions.StorageWrite>();
|
||||||
|
|
||||||
if (cameraPerm != PermissionStatus.Granted || storagePerm != PermissionStatus.Granted)
|
return cameraPerm == PermissionStatus.Granted && storagePerm == PermissionStatus.Granted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OpenAppSettings() => AppInfo.Current.ShowSettingsUI();
|
||||||
|
|
||||||
|
public async Task<AttachedDto?> SelectImageFromCamera()
|
||||||
|
{
|
||||||
|
if (!await RequestCameraPermissions())
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
FileResult? result;
|
FileResult? result;
|
||||||
|
|||||||
@@ -40,6 +40,21 @@
|
|||||||
|
|
||||||
private async Task OnCamera()
|
private async Task OnCamera()
|
||||||
{
|
{
|
||||||
|
if (!await AttachedService.RequestCameraPermissions())
|
||||||
|
{
|
||||||
|
Snackbar.Clear();
|
||||||
|
Snackbar.Add("Per scattare le foto serve il permesso della fotocamera", Severity.Warning, config =>
|
||||||
|
{
|
||||||
|
config.Action = "Impostazioni";
|
||||||
|
config.OnClick = _ =>
|
||||||
|
{
|
||||||
|
AttachedService.OpenAppSettings();
|
||||||
|
return Task.CompletedTask;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
AttachedDto? selectImageFromCamera;
|
AttachedDto? selectImageFromCamera;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -754,12 +754,34 @@
|
|||||||
|
|
||||||
#region File
|
#region File
|
||||||
|
|
||||||
|
// Dopo un rifiuto definitivo Android non ripropone la richiesta: il
|
||||||
|
// permesso si riattiva solo dalle impostazioni, quindi le apriamo noi.
|
||||||
|
private void ShowCameraPermissionDenied()
|
||||||
|
{
|
||||||
|
Snackbar.Clear();
|
||||||
|
Snackbar.Add("Per scattare le foto serve il permesso della fotocamera", Severity.Warning, config =>
|
||||||
|
{
|
||||||
|
config.Action = "Impostazioni";
|
||||||
|
config.OnClick = _ =>
|
||||||
|
{
|
||||||
|
AttachedService.OpenAppSettings();
|
||||||
|
return Task.CompletedTask;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private async Task OpenAddAttached()
|
private async Task OpenAddAttached()
|
||||||
{
|
{
|
||||||
List<AttachedDto>? attachedList;
|
List<AttachedDto>? attachedList;
|
||||||
|
|
||||||
if (AttachedService.IsCameraAvailable)
|
if (AttachedService.IsCameraAvailable)
|
||||||
{
|
{
|
||||||
|
if (!await AttachedService.RequestCameraPermissions())
|
||||||
|
{
|
||||||
|
ShowCameraPermissionDenied();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
AttachedDto? selectImageFromCamera;
|
AttachedDto? selectImageFromCamera;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,6 +6,11 @@ public interface IAttachedService
|
|||||||
{
|
{
|
||||||
bool IsCameraAvailable { get; }
|
bool IsCameraAvailable { get; }
|
||||||
|
|
||||||
|
/// <summary>Chiede i permessi per scattare; false se negati.</summary>
|
||||||
|
Task<bool> RequestCameraPermissions();
|
||||||
|
|
||||||
|
void OpenAppSettings();
|
||||||
|
|
||||||
/// <summary>Null se l'utente annulla; lancia se lo scatto fallisce.</summary>
|
/// <summary>Null se l'utente annulla; lancia se lo scatto fallisce.</summary>
|
||||||
Task<AttachedDto?> SelectImageFromCamera();
|
Task<AttachedDto?> SelectImageFromCamera();
|
||||||
Task<List<AttachedDto>?> SelectImageFromGallery();
|
Task<List<AttachedDto>?> SelectImageFromGallery();
|
||||||
|
|||||||
Reference in new issue
Block a user