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);
});
}