我正在尝试在Xamarin.Forms for Android和iOS上使用MediaManager制作一个广播应用程序。我想在应用程序中包含音量滑块。我已经在 XAML 中实现了这样的内容:
<Slider x:Name="slider" Grid.Column="1" Grid.ColumnSpan="3" Grid.Row="4" VerticalOptions="Center" ValueChanged="ChangeMediaVolume" Minimum="0" Maximum="10" Value="5" Margin="5"/>
对于背后的代码,我使用了此方法:
private void ChangeMediaVolume(object sender, ValueChangedEventArgs args)
{
int value = (int)slider.Value;
CrossMediaManager.Current.Volume.MaxVolume = 10;
CrossMediaManager.Current.Volume.CurrentVolume = value;
}
它在iOS模拟器中运行良好,但是当我启动Android模拟器时,它崩溃并突出显示CrossMediaManager项目并显示消息
System.NullReferenceException 已被抛出。对象引用不 设置为对象的实例。
我不太确定如何修复它或为什么它适用于一个平台而不是另一个平台。
是的。这是一个插件问题,我得到了相同的结果,这是适用于 android 的解决方法。 您可以使用依赖服务来实现这一点。
1.创建接口。
public interface IControlVolume
{
int setControlVolume(int value);
}
2.在安卓中实现它。
[assembly: Dependency(typeof(MyControlVolume))]
namespace VideoPlay.Droid
{
class MyControlVolume : IControlVolume
{
public int setControlVolume(int value)
{
var audioMgr = (AudioManager)Forms.Context.GetSystemService(Context.AudioService);
//set the volume
audioMgr.SetStreamVolume(Android.Media.Stream.Music, value,VolumeNotificationFlags.PlaySound);
//get current value
int Volume = audioMgr.GetStreamVolume(Android.Media.Stream.Music);
return Volume;
}
}
}
这是正在运行的 gif。 https://i.stack.imgur.com/I58kU.jpg
所以我似乎已经弄清楚了这个问题。当我启动应用程序时,播放器直到按下播放按钮才会启动。因此,当应用启动时,跨媒体管理器不会完全实例化。这就是它返回 null 的原因。我捕获了异常,以便它会加载,一旦播放器启动,一切正常。