Ich arbeite derzeit an UWP-Projekt in der Lage zu steuern andere App Hintergrund Media Player Instanz, ich. e .:Fire System-Event, um andere Anwendungen zu steuern MediaPlayer
MediaPlayer player = BackgroundMediaPlayer.Current;
Als ich auf MSDN official documentation of MedaPlayer class gefunden - es Lied Überspringen oder bewegt zu vorherigen keine direkte Methode ist.
Ich habe für eine Lösung selbst für einige Tage suchen, bis ich auf so etwas wie dieses bekam:
(Fireevent von here - modifizierte einer Zeile auf UWP zu arbeiten)
private async void button3_Click(object sender, RoutedEventArgs e)
{
MediaPlayer player = BackgroundMediaPlayer.Current;
SystemMediaTransportControls d;
await Task.Factory.StartNew(() => { d = player.SystemMediaTransportControls; });
await FireEvent(d, "ButtonPressed", new FakeEventArgs(SystemMediaTransportControlsButton.Next));
}
public async Task FireEvent(object onMe, string invokeMe, params object[] eventParams)
{
MulticastDelegate eventDelagate = (MulticastDelegate)onMe.GetType().GetField(invokeMe,
BindingFlags.Instance |
BindingFlags.NonPublic).GetValue(onMe);
Delegate[] delegates = eventDelagate.GetInvocationList();
foreach (Delegate dlg in delegates)
{
dlg.DynamicInvoke(dlg.Target, eventParams);
}
}
Obwohl ich selbst gemacht sicher, dass auf meinem Test Telefon gibt es eine Musik zu spielen, nach Linie definieren eventDelegate ich:
Exception thrown: 'System.NullReferenceException' in foo.exe
Was mache ich falsch? Gibt es eine andere Art zu schießen und Ereignis? Oder sogar eine andere Methode, um den MediaPlayer anderer Apps zu steuern?
EDIT 1 FakeEventArgs als Äquivalent SystemMediaTransportControlsButtonPressedEventArgs gemacht wird, verursachen diese Klasse nicht konstruierbar ist, wie hier:
public sealed class FakeEventArgs
{
SystemMediaTransportControlsButton Button = SystemMediaTransportControlsButton.Pause;
public FakeEventArgs (SystemMediaTransportControlsButton But)
{
Button = But;
}
}
Es ist ein wenig unklar, wo Sie die "NullReferenceException" bekommen, ist es auf der 'eventDelagate' Deklaration oder auf dem' eventDelagate.GetInvocationList() 'Aufruf? Es würde helfen, wenn Sie Ihre Stack-Trace in Ihre Frage aufnehmen würden. – gmiley
Auf der Deklaration kann ich Stack-Trace aufgrund von Fehlern in Visual Studio nicht anzeigen. – Hypixus
Verifizieren Sie, dass Sie tatsächlich eine Instanz eines Objekts an den 'FireEvent'-Aufruf übergeben? Überprüfen Sie, ob Ihre Variable "d" nicht null ist, bevor Sie versuchen, eine Aktion für sie auszuführen. – gmiley