【发布时间】:2018-02-09 04:04:13
【问题描述】:
我希望用户能够将有关我的应用的反馈发送到某个地址。使用电子邮件插件,这一切都很好,但是在电子邮件的正文中,我想预先填充一些关于他们正在运行的应用程序的信息。
理想情况下,我想要设备、操作系统、屏幕分辨率、方向等,但现在我只满足于操作系统
【问题讨论】:
标签: mvvmcross
我希望用户能够将有关我的应用的反馈发送到某个地址。使用电子邮件插件,这一切都很好,但是在电子邮件的正文中,我想预先填充一些关于他们正在运行的应用程序的信息。
理想情况下,我想要设备、操作系统、屏幕分辨率、方向等,但现在我只满足于操作系统
【问题讨论】:
标签: mvvmcross
感觉很奇怪,但我不记得有人曾要求将此作为一项功能,而且我认为也没有人为它制作插件。
考虑到您未来的需求(屏幕分辨率、方向等),最简单的方法可能是在您的核心项目中定义一个界面:
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; } }
}
(具体屏幕尺寸,另见https://github.com/MvvmCross/MvvmCross-Tutorials/tree/master/FractalGen中的IDisplayDimensionsService)
【讨论】:
原来已经有一个项目可以做到这一点 - https://github.com/aritchie/acrmvvmcross 向艾伦·里奇致敬!
不幸的是,没有 Windows Phone 实现 et,所以我实现了 sme 的功能如下:
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());
【讨论】:
在您的 ViewModel 中:
private string _os;
public string Os
{
get { return _os; }
set { SetProperty(ref _os, value); }
}
在查看创建(ViewDidLoad/OnCreate)
ViewModel.Os = "iOS"; or ViewModel.Os = "Android";
【讨论】: