Я только что сделал именно это и вел себя так же.
Для начала пакет NuGet правильный. Файл device.dat раньше хранился в APP_Data, однако, если вы используете облегченную версию, он теперь встроен в файл FiftyOne.Foundation.dll.
Чтобы исправить iPhone, это чувствительный к делу тест. FiftyOne устанавливает MobileDeviceModel в «IPhone» (заглавная I) - это работало с эмулятором Electric Plum iphone.
Для работы Android кажется, что «облегченная» версия не устанавливает платформу на «Android». Простой обходной путь - использовать строку UserAgent. то есть
ContextCondition = Context => Context.GetOverriddenUserAgent (). Contains ("Android")
Наконец, вы должны быть осторожны с тем, как вставить эти предметы в коллекцию. Приведенный выше код вставляет правило Android, затем вставляет правило IPhone (таким образом, android теперь находится в положении 1 в коллекции), а затем вставляет правило Mobile в положение 1 - таким образом, коллекция в конечном итоге выглядит следующим образом:
IPhone
мобильный
Android
Как таковое устройство Android всегда сначала выбирает правило для мобильных устройств и никогда не отображает страницу браузера, специфичную для Android.
Поэтому измените Inserts на 0,1 и 2 в указанном выше порядке. Это дает тот же порядок, что и код, и все работает просто отлично.
В дополнение к стилю инициализации ASP.Net MVC 4 я выделил этот код в папку APP_Start в своем собственном классе, т. Е.
public class DeviceConfig
{
public static void RegisterDevices(IList<IDisplayMode> modes)
{
//The Android view
modes.Insert(0, new DefaultDisplayMode("android")
{
ContextCondition = Context => Context.GetOverriddenUserAgent().Contains("Android")
});
//The iPhone view
modes.Insert(1, new DefaultDisplayMode("iphone")
{
ContextCondition = Context => Context.Request.Browser.MobileDeviceModel == "IPhone"
});
//The mobile view
//This has a lower priority than the other two so will only be used by a mobile device
//that isn't Android or iPhone
modes.Insert(2, new DefaultDisplayMode("mobile")
{
ContextCondition = Context => Context.Request.Browser.IsMobileDevice
});
}
}
, а затем в Global.asax.cs
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
DeviceConfig.RegisterDevices(DisplayModeProvider.Instance.Modes);
}