我正试图用MediaManager在Xamarin.Forms上为安卓和iOS制作一个无线电应用程序。我想在应用程序中包括一个音量滑块。我在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被扔了。对象引用未设置为对象的实例。
我不太清楚如何修复它,也不知道为什么它适用于一个平台,而不是另一个平台。
发布于 2019-12-15 10:58:38
所以我似乎已经解决了这个问题。当我启动应用程序时,播放器不会启动,直到按下播放按钮。正因为如此,当应用程序启动时,就不会完全实例化了。这就是它返回null的原因。我捕捉到了异常,这样它就会加载,一旦玩家启动,一切都会很好地工作。
发布于 2019-12-12 12:18:09
是。这是一个插件问题,我得到了同样的结果,这是一个解决android的方法。您可以使用dependenceService来实现这一点。
1.创建一个接口。
public interface IControlVolume
{
int setControlVolume(int value);
}2.在android上实现。
[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;
}
}
}https://stackoverflow.com/questions/59302530
复制相似问题