2014-03-02 46 views
5

我希望用户能够将有关我的应用的反馈发送到地址。使用电子邮件插件,这一切都很好,但在电子邮件的正文中,我想预先填充有关他们正在运行的应用程序的一些信息。如何在运行时使用MvvMCross检测平台?

理想情况下,我想的设备,操作系统,屏幕资源,方位等,但现在我只是满足于OS

回答

6

这感觉很奇怪,但我不记得任何人都会要求这个功能,我不认为有人为它做过插件。

考虑您的未来需求(屏幕解析度,定位等),以最简单的方法可能是在你的核心项目,定义一个接口:

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/wiki/Customising-using-App-and-Setup#wiki-registering-platform-specific-business-objects-in-setupinitializefirstchance-and-setupinitializelastchance

(特别是对于屏幕尺寸,也看到IDisplayDimensionsServicehttps://github.com/MvvmCross/MvvmCross-Tutorials/tree/master/FractalGen

+0

太好了 - 谢谢。 – Coatsy

+0

我已经完成了这项工作 - 哪里是分享它的最佳地点。作为MvvMCross noob,我不确定礼节。 – Coatsy

1

原来已经有一个项目是这样做的 - 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()); 
0

在你视图模型

private string _os; 
public string Os 
{ 
    get { return _os; } 
    set { SetProperty(ref _os, value); } 
} 

查看创建(viewDidLoad中/在OnCreate)

ViewModel.Os = "iOS"; or ViewModel.Os = "Android";