android 10, xamarin Как управлять встроенным медиаплеером с помощью intent?

Есть приложение, которое с помощью Intent может ставить на паузу/продолжать, переключать текущую песню из любого плеера. Код работал на android 9. На 10 ничего не происходит.

public class AudioMediaService
{

    private Intent musicIntent;

    public void PauseResume()
    {
        
        if (manager.IsMusicActive)
            pause();
        else
            resume();
    }

    private void pause()
    {
        musicIntent.PutExtra(Intent.ExtraKeyEvent, new KeyEvent(KeyEventActions.Down, Keycode.MediaPause));
        Android.App.Application.Context.SendOrderedBroadcast(musicIntent, null);
        musicIntent.PutExtra(Intent.ExtraKeyEvent, new KeyEvent(KeyEventActions.Up, Keycode.MediaPause));
        Android.App.Application.Context.SendOrderedBroadcast(musicIntent, null);
    }

    private void resume()
    {
        musicIntent.PutExtra(Intent.ExtraKeyEvent, new KeyEvent(KeyEventActions.Down, Keycode.MediaPlay));
        Android.App.Application.Context.SendOrderedBroadcast(musicIntent, null);
        musicIntent.PutExtra(Intent.ExtraKeyEvent, new KeyEvent(KeyEventActions.Up, Keycode.MediaPlay));
        Android.App.Application.Context.SendOrderedBroadcast(musicIntent, null);
    }

    public void Next()
    {
        musicIntent.PutExtra(Intent.ExtraKeyEvent, new KeyEvent(KeyEventActions.Down, Keycode.MediaNext));
        Android.App.Application.Context.SendOrderedBroadcast(musicIntent, null);
        musicIntent.PutExtra(Intent.ExtraKeyEvent, new KeyEvent(KeyEventActions.Up, Keycode.MediaNext));
        Android.App.Application.Context.SendOrderedBroadcast(musicIntent, null);
    }

    public void Previous()
    {
        musicIntent.PutExtra(Intent.ExtraKeyEvent, new KeyEvent(KeyEventActions.Down, Keycode.MediaPrevious));
        Android.App.Application.Context.SendOrderedBroadcast(musicIntent, null);
        musicIntent.PutExtra(Intent.ExtraKeyEvent, new KeyEvent(KeyEventActions.Up, Keycode.MediaPrevious));
        Android.App.Application.Context.SendOrderedBroadcast(musicIntent, null);
    }

    public AudioMediaService()
    {
        musicIntent = new Intent(Intent.ActionMediaButton);
    }
}

Может необходимо какое-то дополнительное разрешение или данный способ уже устарел? Есть ли аналогичное решение?


Ответы (1 шт):

Автор решения: Andrew Pstvt

Нашел решение: нужно вместо Intent использовать Instrumentation.

    private void pause()
    {
        Task.Run(() =>
        {
            Instrumentation inst = new Instrumentation();
            inst.SendKeyDownUpSync(Keycode.MediaPause);
        });
    }

    private void resume()
    {
        Task.Run(() =>
        {
            Instrumentation inst = new Instrumentation();
            inst.SendKeyDownUpSync(Keycode.MediaPlay);
        });
    }
→ Ссылка