我希望用户能够将有关我的应用的反馈发送到地址。使用电子邮件插件,这一切都很好,但在电子邮件的正文中,我想预先填充有关他们正在运行的应用程序的一些信息。如何在运行时使用MvvMCross检测平台?
理想情况下,我想的设备,操作系统,屏幕资源,方位等,但现在我只是满足于OS
我希望用户能够将有关我的应用的反馈发送到地址。使用电子邮件插件,这一切都很好,但在电子邮件的正文中,我想预先填充有关他们正在运行的应用程序的一些信息。如何在运行时使用MvvMCross检测平台?
理想情况下,我想的设备,操作系统,屏幕资源,方位等,但现在我只是满足于OS
这感觉很奇怪,但我不记得任何人都会要求这个功能,我不认为有人为它做过插件。
考虑您的未来需求(屏幕解析度,定位等),以最简单的方法可能是在你的核心项目,定义一个接口:
public enum OS
{
Droid, Touch, WinPhone, WinStore, Mac, Wpf
}
public IDetails
{
OS OS { get; }
// whatever else you need
}
然后,您可以在每个UI项目注册实现这个 - 例如在Setup
为WinPhone,添加:
protected override void InitializeLastChance()
{
base. Setup.InitializeLastChance();
Mvx.RegisterSingleton<IDetails>(new WindowsPhoneDetails());
}
其中:
public class WindowsPhoneDetails : IDetails
{
public OS OS { get { return OS.WinPhone; } }
}
(特别是对于屏幕尺寸,也看到IDisplayDimensionsService
在https://github.com/MvvmCross/MvvmCross-Tutorials/tree/master/FractalGen)
原来已经有一个项目是这样做的 - https://github.com/aritchie/acrmvvmcross Kudos Allan Ritchie!
不幸的是,没有Windows Phone的实施等,所以我实现的功能中小企业如下:
public class WindowsPhoneDeviceInfoService : IDeviceInfoService
{
public bool IsFrontCameraAvailable
{
get { throw new NotImplementedException(); }
}
public bool IsRearCameraAvailable
{
get { throw new NotImplementedException(); }
}
public bool IsSimulator
{
get { throw new NotImplementedException(); }
}
public string Manufacturer
{
get { return DeviceStatus.DeviceManufacturer; }
}
public string Model
{
get { return DeviceStatus.DeviceName; }
}
public string OperatingSystem
{
get { return Environment.OSVersion.Version.ToString(); }
}
public int ScreenHeight
{
get
{
object szo;
if (DeviceExtendedProperties.TryGetValue("PhysicalScreenResolution", out szo))
{
Size sz = (Size)szo;
if (sz == null)
return 0;
return (int)sz.Height;
}
else
{
return 0;
}
}
}
public int ScreenWidth
{
get
{
object szo;
if (DeviceExtendedProperties.TryGetValue("PhysicalScreenResolution", out szo))
{
Size sz = (Size)szo;
if (sz == null)
return 0;
return (int)sz.Width;
}
else
{
return 0;
}
}
}
}
当然,我也只好登记setup.cs类:
Mvx.RegisterSingleton<IDeviceInfoService>(new WindowsPhoneDeviceInfoService());
在你视图模型:
private string _os;
public string Os
{
get { return _os; }
set { SetProperty(ref _os, value); }
}
在查看创建(viewDidLoad中/在OnCreate)
ViewModel.Os = "iOS"; or ViewModel.Os = "Android";
太好了 - 谢谢。 – Coatsy
我已经完成了这项工作 - 哪里是分享它的最佳地点。作为MvvMCross noob,我不确定礼节。 – Coatsy