0

I am trying to integrate my .NET MAUI app with Azure cognitive speech service, following the old xamarin tutorial from microsoft https://learn.microsoft.com/en-us/xamarin/xamarin-forms/data-cloud/azure-cognitive-services/speech-recognition

According to this guy MAUI-Android: How to keep Google Speech Recognizer from timeout it should work.

The implementation part of the microphone service is giving me compilation errors. This is the code:

using Android.App;
using Android.Content.PM;
using Android.OS;
using AndroidX.Core.App;
using Google.Android.Material.Snackbar;
using System.Threading.Tasks;
using Atk.Progen.NETMAUI.Interfaces;
using Atk.Progen.NETMAUI.Platforms.Android;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Android;

namespace Atk.Progen.NETMAUI.Platforms.Android
{
    public class MicrophoneService
{
    public const int RecordAudioPermissionCode = 1;
    private TaskCompletionSource<bool> tcsPermissions;
    string[] permissions = new string[] { Manifest.Permission.RecordAudio };

    public MicrophoneService()
    {
        tcsPermissions = new TaskCompletionSource<bool>();
    }

    public Task<bool> GetPermissionAsync()
    {

        if ((int)Build.VERSION.SdkInt < 23)
        {
            tcsPermissions.TrySetResult(true);
        }
        else
        {
            var currentActivity = MainActivity.Instance;
            if (ActivityCompat.CheckSelfPermission(currentActivity, Manifest.Permission.RecordAudio) != (int)Permission.Granted)
            {
                RequestMicPermissions();
            }
            else
            {
                tcsPermissions.TrySetResult(true);
            }

        }

        return tcsPermissions.Task;
    }

    public void OnRequestPermissionResult(bool isGranted)
    {
        tcsPermissions.TrySetResult(isGranted);
    }

    void RequestMicPermissions()
    {
        if (ActivityCompat.ShouldShowRequestPermissionRationale(MainActivity.Instance, Manifest.Permission.RecordAudio))
        {
            Snackbar.Make(MainActivity.Instance.FindViewById(Android.Resource.Id.Content),
                    "Microphone permissions are required for speech transcription!",
                    Snackbar.LengthIndefinite)
                    .SetAction("Ok", v =>
                    {
                        ((Activity)MainActivity.Instance).RequestPermissions(permissions, RecordAudioPermissionCode);
                    })
                    .Show();
        }
        else
        {
            ActivityCompat.RequestPermissions((Activity)MainActivity.Instance, permissions, RecordAudioPermissionCode);
        }
    }
}
}

The error is on MainActivity.Istance and on Android.Resource.Id.Content. It says "MainActivity does not contain definition for Instance".

Any suggestion on how to make it work on .net MAUI?

1 Answers1

1

Android support for MAUI has been released in Speech SDK 1.24.0 release. You should be able to use https://www.nuget.org/packages/Microsoft.CognitiveServices.Speech in your MAUI app for Android.

Additionally, we will be releasing support for iOS and Maccatalyst in 1.25.0 release ETA Jan 2023.

jhakulin
  • 179
  • 5