Hallo zusammen,
ich habe mal angefangen mit Windows 8 - Apps herumzuspielen und möchte eine simple App zum abspielen eines Webradio-Streams bauen.
Mein Ergebnis bisher ist aber eher durchwachsen. Ich schaffe es den Stream zu hören und auch zu pausieren, aber Stoppen will einfach nicht gelingen.
Zudem habe ich ein Threading-Problem, wenn ich über die Keyboard-tasten (zb. Play/Pause) die App ansteuern möchte.
Mein XAML:
[highlight=XML]
<Page
x:Class="GildeGothicRadio.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:GildeGothicRadio"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Page.Resources>
<Style x:Name="transportStyle" TargetType="Button">
<Setter Property="Height" Value="40" />
<Setter Property="Width" Value="75" />
<Setter Property="FontSize" Value="11" />
</Style>
</Page.Resources>
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<StackPanel Name="TransportControlsPanel"
HorizontalAlignment="Center"
Grid.Row="1" >
<MediaElement x:Name="myMedia" Source="http://radio-mmorpg.de:8000" AudioCategory="BackgroundCapableMedia" AutoPlay="False" />
<StackPanel Orientation="Horizontal">
<Button Name="btnPlay" Click="btnPlay_Click"
Style="{StaticResource transportStyle}" Content="Play" />
<Button Name="btnPause" Click="btnPause_Click"
Style="{StaticResource transportStyle}" Content="Pause" />
<Button x:Name="btnStop" Click="btnStop_Click"
Style="{StaticResource transportStyle}" Content="Stop" Margin="0,364" />
</StackPanel>
</StackPanel>
</Grid>
</Page>
[/highlight]
Und das ist der Code:
[highlight=c#]
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.Media;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// Die Elementvorlage "Leere Seite" ist unter http://go.microsoft.com/fwlink/?LinkId=234238 dokumentiert.
namespace GildeGothicRadio
{
/// <summary>
/// Eine leere Seite, die eigenständig verwendet werden kann oder auf die innerhalb eines Rahmens navigiert werden kann.
/// </summary>
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
MediaControl.PlayPressed += MediaControl_PlayPressed;
MediaControl.PausePressed += MediaControl_PausePressed;
MediaControl.PlayPauseTogglePressed += MediaControl_PlayPauseTogglePressed;
MediaControl.StopPressed += MediaControl_StopPressed;
}
/// <summary>
/// Wird aufgerufen, wenn diese Seite in einem Rahmen angezeigt werden soll.
/// </summary>
/// <param name="e">Ereignisdaten, die beschreiben, wie diese Seite erreicht wurde. Die
/// Parametereigenschaft wird normalerweise zum Konfigurieren der Seite verwendet.</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
private void MediaControl_StopPressed(object sender, object e)
{
myMedia.Stop();
}
private void MediaControl_PlayPauseTogglePressed(object sender, object e)
{
if (myMedia.CurrentState == MediaElementState.Playing) myMedia.Pause();
else myMedia.Play();
}
private void MediaControl_PausePressed(object sender, object e)
{
myMedia.Pause();
}
private void MediaControl_PlayPressed(object sender, object e)
{
myMedia.Play();
}
private void btnPlay_Click(object sender, RoutedEventArgs e)
{
//myMedia.Play();
MediaControl_PlayPressed(sender, e);
}
private void btnPause_Click(object sender, RoutedEventArgs e)
{
//myMedia.Pause();
MediaControl_PausePressed(sender, e);
}
private void btnStop_Click(object sender, RoutedEventArgs e)
{
//myMedia.Stop();
MediaControl_StopPressed(sender, e);
}
}
}
[/highlight]
und ins Manifest hab ich dieses eingetragen:
[highlight=XML]
<BackgroundTasks>
<Task Type="audio" />
<Task Type="controlChannel" />
</BackgroundTasks>
[/highlight]
Kennt sich da jemand mit aus und kann mir sagen, was ich falsch mache, oder anders machen soll?
Danke schon mal
Andreas
ich habe mal angefangen mit Windows 8 - Apps herumzuspielen und möchte eine simple App zum abspielen eines Webradio-Streams bauen.
Mein Ergebnis bisher ist aber eher durchwachsen. Ich schaffe es den Stream zu hören und auch zu pausieren, aber Stoppen will einfach nicht gelingen.
Zudem habe ich ein Threading-Problem, wenn ich über die Keyboard-tasten (zb. Play/Pause) die App ansteuern möchte.
Mein XAML:
[highlight=XML]
<Page
x:Class="GildeGothicRadio.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:GildeGothicRadio"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Page.Resources>
<Style x:Name="transportStyle" TargetType="Button">
<Setter Property="Height" Value="40" />
<Setter Property="Width" Value="75" />
<Setter Property="FontSize" Value="11" />
</Style>
</Page.Resources>
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<StackPanel Name="TransportControlsPanel"
HorizontalAlignment="Center"
Grid.Row="1" >
<MediaElement x:Name="myMedia" Source="http://radio-mmorpg.de:8000" AudioCategory="BackgroundCapableMedia" AutoPlay="False" />
<StackPanel Orientation="Horizontal">
<Button Name="btnPlay" Click="btnPlay_Click"
Style="{StaticResource transportStyle}" Content="Play" />
<Button Name="btnPause" Click="btnPause_Click"
Style="{StaticResource transportStyle}" Content="Pause" />
<Button x:Name="btnStop" Click="btnStop_Click"
Style="{StaticResource transportStyle}" Content="Stop" Margin="0,364" />
</StackPanel>
</StackPanel>
</Grid>
</Page>
[/highlight]
Und das ist der Code:
[highlight=c#]
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.Media;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// Die Elementvorlage "Leere Seite" ist unter http://go.microsoft.com/fwlink/?LinkId=234238 dokumentiert.
namespace GildeGothicRadio
{
/// <summary>
/// Eine leere Seite, die eigenständig verwendet werden kann oder auf die innerhalb eines Rahmens navigiert werden kann.
/// </summary>
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
MediaControl.PlayPressed += MediaControl_PlayPressed;
MediaControl.PausePressed += MediaControl_PausePressed;
MediaControl.PlayPauseTogglePressed += MediaControl_PlayPauseTogglePressed;
MediaControl.StopPressed += MediaControl_StopPressed;
}
/// <summary>
/// Wird aufgerufen, wenn diese Seite in einem Rahmen angezeigt werden soll.
/// </summary>
/// <param name="e">Ereignisdaten, die beschreiben, wie diese Seite erreicht wurde. Die
/// Parametereigenschaft wird normalerweise zum Konfigurieren der Seite verwendet.</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
private void MediaControl_StopPressed(object sender, object e)
{
myMedia.Stop();
}
private void MediaControl_PlayPauseTogglePressed(object sender, object e)
{
if (myMedia.CurrentState == MediaElementState.Playing) myMedia.Pause();
else myMedia.Play();
}
private void MediaControl_PausePressed(object sender, object e)
{
myMedia.Pause();
}
private void MediaControl_PlayPressed(object sender, object e)
{
myMedia.Play();
}
private void btnPlay_Click(object sender, RoutedEventArgs e)
{
//myMedia.Play();
MediaControl_PlayPressed(sender, e);
}
private void btnPause_Click(object sender, RoutedEventArgs e)
{
//myMedia.Pause();
MediaControl_PausePressed(sender, e);
}
private void btnStop_Click(object sender, RoutedEventArgs e)
{
//myMedia.Stop();
MediaControl_StopPressed(sender, e);
}
}
}
[/highlight]
und ins Manifest hab ich dieses eingetragen:
[highlight=XML]
<BackgroundTasks>
<Task Type="audio" />
<Task Type="controlChannel" />
</BackgroundTasks>
[/highlight]
Kennt sich da jemand mit aus und kann mir sagen, was ich falsch mache, oder anders machen soll?
Danke schon mal
Andreas
Comment