deviceFilters与设备过滤

本主题是ASP.NET在移动设备上展示的方面的内容

起初看起来deviceFilters与前面的browserCaps类似。同样也会关联到HttpBrowserCapabilities,而在这里用到的是MobileCapabilities,但是细看后发现browserCaps关注的是浏览器,deviceFilters关注的是设备本身。

定义了设备筛选器之后,您可以将其应用于 ASP.NET 移动控件中以定义特定于设备的呈现。 应用的设备筛选器映射到 .aspx 文件中 DeviceSpecific构造内的 <choice> 元素。 然后,您可以为这些应用的设备筛选器设置属性重写和模板化。 一些特定于设备的自定义示例包括:

  • 重写控件的属性,例如根据显示功能为 Image 控件选择不同的图像。
  • 对不同的移动设备使用不同的呈现样式。
  • 在设备(例如 Pocket PC)上使用模板实现更丰富的呈现。

    这些方案中的每一个都需要根据目标设备是否与 Web.config 文件中的 <deviceFilters> 节匹配来进行筛选。 这些筛选器也可能遍布在应用程序中,而不是只出现在一个地方。

    实际上服务端从一个HTTP请求得知这些信息,请求头肯定有附带。在面前的内容知道,浏览器的信息通过对User-Agent的识别,再通过浏览器功能定义,把结果存放在HttpBrowserCapabilities中,而这里对设备功能判定的就是基于这里得出的HttpBrowserCapabilities来进行。

    ASP.NET内置的设备功能可查看附表1

    可以从两种设备筛选器中进行选择:比较计算器或计算委托。

    对于简单的比较,可以通过提供功能的名称和要与之比较的值,指定基于比较的筛选器。 在运行时,如果功能值和提供的值相等,则设备筛选器的计算结果为 true。 布尔值属性在比较时不区分大小写;因此,true 和 True 都有效。 其他属性比较区分大小写。

    对于更复杂的计算,您可以通过提供方法的类和方法名指定基于计算委托的筛选器。 在运行时,调用所提供的方法来确定设备筛选器的计算结果是否为 true。

    在Web.config文件中配置如下

    <deviceFilters>
    <filter name="IsHtml"
    compare="PreferredRendering"
    argument="html32" />
    <filter name="GPSEnabled"
    type="MyApplication.MyCapabilityEvaluators,MyApplication"
    method="IsGPSEnabled" />
    </deviceFilters>

    对于第一个filter是用比较计算器的,compare特性是指定由比较计算器计算的浏览器功能。 该功能可以是任何内置功能,也可以是任何其他自定义功能计算器的名称。argument特性是指定该功能应与之比较的参数;

    对于第二个filter是用计算委托,type是指定提供计算委托的类类型。是类的完全限定名:(类的全名+","+程序集名称),method特性是指定提供计算委托的方法。

    下面的示例演示如何定义名为 isHTML32 的设备筛选器。

    <filter name="isHTML32" compare="PreferredRenderingType" argument="html32" />

    在运行时,此筛选器将当前请求的 MobileCapabilities 实例的 PreferredRenderingType 属性值与值 html32 进行比较。

    下面的示例演示如何定义名为 GPSEnabled 的新功能。

    namespace MyAssembly
    {
    publicclass MyCapabilityEvaluators
    {
    publicstaticbool IsGPSEnabled(
    System.Web.Mobile.MobileCapabilities capabilities,
    String unusedArg)
    {
    // processing code
    }
    }
    }

    将以下元素添加到适当的 Web.config 文件以添加新功能:

    <filter name="GPSEnabled"
    type="MyNamespace.MyCapabilityEvaluators, MyAssembly"
    method="IsGPSEnabled" />

    如果使用 Filter 属性指定方法名称,则该方法必须符合以下原型

    public bool methodName(
    System.Web.Mobile.MobileCapabilities capabilities,
    String optionalArgument);

    若需要获取设备是否支持指定功能可以使用以下方式

    对于内置的功能除了可以用MobileCapabilities的属性进行比较外,还可以这样子

    ((System.Web.Mobile.MobileCapabilities)System.Web.HttpContext.Current.Request.Browser).HasCapability("ScreenBitDepth", "8");

    返回的是一个bool值,表明是否具备该功能;

    对于自定义的功能,只能通过HasCapability

    ((System.Web.Mobile.MobileCapabilities)System.Web.HttpContext.Current.Request.Browser).HasCapability("GPSEnabled", null);

    HasCapability 方法使用两个参数:capabilityName,它是功能字典中设备计算方法、属性或项的名称;optionalArgument,它是 capabilityName参数需要的任何参数。 HasCapability 方法按照以下顺序执行其计算:

  1. 它检查 capabilityName 值是否是 Web.config 文件中指定的设备筛选器的名称。

注意


HasCapability 方法通过将 optionalArgument 参数设置为 null 来计算 <DeviceSpecific> 和 <Choice> 构造。

  1. 如果第 1 步中的测试返回 true 并且筛选器是委托计算器(使用自定义方法计算指定数据的筛选器),则 HasCapability 方法将使用optionalArgument 参数中提供的参数调用委托并返回结果。
  2. 如果第 1 步中的测试返回 true 并且筛选器是比较计算器(将功能名与某个指定的值进行比较的筛选器),则 HasCapability 方法将使用该功能名和计算器中提供的参数(忽略所有原始 optionalArgument 参数)调用其本身并返回结果。
  3. 如果 MobileCapabilities 对象具有名为 capabilityName 的属性,则 HasCapability 方法将此属性强制转换为字符串并在optionalArgument 值等于该字符串时返回 true。 布尔型比较不区分大小写;其他比较区分大小写。 因此,"true"等同于"True",但"left"不等于"Left"。
  4. 如果不存在任何 capabilityName 属性,则 HasCapability 方法将在与 MobileCapabilities 对象关联的功能字典中进行查找。 如果capabilityName 属性存在,则 HasCapability 方法将其与 optionalArgument 参数进行比较并返回结果。 因为字典可以维护字符串,所以无需进行强制转换。
  5. 如果这些测试失败,HasCapability 方法将引发 ArgumentOutOfRangeException 异常。

附表1

下表从适配器开发人员的角度列出了 ASP.NET 移动控件设备属性及有效的标记语言。 此表还列出对于应用程序逻辑中的常规使用有效、从而适用于所有标记语言的属性(通常不是呈现标记的属性)。


Property


常规使用


HTML 和 XHTML


cHTML


WML


Browser






CanCombineFormsInDeck






CanInitiateVoiceCall






CanRenderEmptySelects






CanRenderInputAndSelectElementsTogether






CanRenderMixedSelects






CanRenderOneventAndPrevElementsTogether






CanRenderPostBackCards






CanRenderSetvarZeroWithMultiSelectionList






CanSendMail






DefaultSubmitButtonLimit






GatewayMajorVersion






GatewayMinorVersion






GatewayVersion






HasBackButton






HidesRightAlignedMultiselectScrollbars






InputType






IsColor






IsMobileDevice






Item






MaximumRenderedPageSize






MaximumSoftkeyLabelLength






MobileDeviceManufacturer






MobileDeviceModel






NumberOfSoftkeys






PreferredImageMime






PreferredRenderingMime






PreferredRenderingType






RendersBreakBeforeWmlSelectAndInput






RendersBreaksAfterHtmlLists






RendersBreaksAfterWmlAnchor






RendersBreaksAfterWmlInput






RendersWmlDoAcceptsInline






RendersWmlSelectsAsMenuCards






RequiredMetaTagNameValue






RequiresContentTypeMetaTag






RequiresAttributeColonSubstitution






RequiresHtmlAdaptiveErrorReporting






RequiresLeadingPageBreak






RequiresNoBreakInFormatting






RequiresOutputOptimization






RequiresPhoneNumbersAsPlainText






RequiresSpecialViewStateEncoding






RequiresUniqueFilePathSuffix






RequiresUniqueHtmlCheckboxNames






RequiresUniqueHtmlInputNames






RequiresUrlEncodedPostfieldValues






ScreenBitDepth






ScreenCharactersHeight






ScreenCharactersWidth






ScreenPixelsHeight






ScreenPixelsWidth






SupportsAccesskeyAttribute






SupportsBodyColor






SupportsBold






SupportsCacheControlMetaTag






SupportsCss






SupportsDivAlign






SupportsDivNoWrap






SupportsFontColor






SupportsFontName






SupportsFontSize






SupportsImageSubmit






SupportsIModeSymbols






SupportsInputIStyle






SupportsInputMode






SupportsItalic






SupportsJPhoneMultiMediaAttributes






SupportsJPhoneSymbols






SupportsQueryStringInFormAction






SupportsSelectMultiple






SupportsUncheck





MSDN参考

移动设备功能(总览页)

来自 <https://msdn.microsoft.com/zh-cn/library/wa9x6tza(v=vs.100).aspx>

设备筛选建议

来自 <https://msdn.microsoft.com/zh-cn/library/8xef2eak(v=vs.100).aspx>

设备功能表

来自 <https://msdn.microsoft.com/zh-cn/library/dcwa1kf5(v=vs.100).aspx>

为多个设备配置 Web 应用程序

来自 <https://msdn.microsoft.com/zh-cn/library/fcs06t52(v=vs.100).aspx>

以编程方式计算功能

来自 <https://msdn.microsoft.com/zh-cn/library/2cf6d1wd(v=vs.100).aspx>

设备计算方法

来自 <https://msdn.microsoft.com/zh-cn/library/hweskhy5(v=vs.100).aspx>

时间: 2024-10-06 19:47:00

deviceFilters与设备过滤的相关文章

第18.2节_地址类型与LL层设备过滤

一.地址类型 二.白名单和Resolving List 三.LL层设备过滤 一.地址类型 学习资料:官方手册 Vol 6: Core System Package [Low Energy Controller volume] Part B: Link Layer Specification 1.3 Device Address 这篇文章总结得比较好: 蓝牙协议分析(6)_BLE地址类型 http://www.wowotech.net/bluetooth/ble_address_type.html

---- 关于Android蓝牙搜索到设备的图标显示和设备过滤

根据: https://www.douban.com/note/637446089/http://bbs.16rd.com/blog-23795-3446.html 以下摘自原文: (Android主机)每一个设备被搜到时,(设备)会提供COD(class of device)给对方,搜索方可以依据cod判断设备类型.Android在搜索到Device时,会将(获得)COD update给Settings,保存到CachedBluetoothDevice.mBtClass; UI update时

[转载]windows过滤驱动程序设计入门(驱动程序基本结构,设备栈,IRP栈和工作原理)

本文转载自: http://blog.csdn.net/arvon2012/article/details/7789724 最近在学习windows驱动设计,认真看了些教材后总结了我认为驱动中都会涉及到,也最重要的概念,和大家分享.如果有说的不对的请大家留言指出.谢谢! 这里主要是写概念,代码涉及的不多也不详细,但是我会说出涉及到的API,详细的使用细节大家可以自己动手搜搜.掌握下面的概念之后,看驱动开发的教材里的代码,或者理解教材里说的内容应该就顺利很多! 过滤驱动程序概括: 对于window

《TCP/IP详解卷2:实现》笔记--BPF:BSD 分组过滤程序

BSD分组过滤程序(BPF)是一种软件设备,用于过滤网络接口的数据流,即给网络接口加上开关.应用进程打开/dev/bpf0. /dev/bpf1等等后,可以读取BPF设备,每个应用进程一次只能打开一个BPF设备. 通过若干ioctl命令,可以配置BPF设备,把它与某个网络接口相关联,并安装过滤程序,从而能够选择性地接收输入的分组. BPF设备打开后,应用进程通过读写设备来接收分组,或将分组放入网络接口队列中. BPF设备工作的前提是网络接口必须能够支持BPF.之前提到的以太网和环回接口的驱动程序

Minifilter微过滤框架:框架介绍以及驱动层和应用层的通讯

minifilter是sfilter后微软推出的过滤驱动框架.相比于sfilter,他更容易使用,需要程序员做的编码更简洁. 系统为minifilter专门制作了一个过滤管理器,这个管理器本身其实是一个传统过滤驱动,它向minifilter的使用者提供许多接口,让原本复杂的文件过滤驱动变得方便简单.之所以简单是因为传统的过滤驱动把大量的工作放在绑定设备上,而现在这些工作都交给minifilter中的过滤管理器来完成. 缺点:纯粹的使用minifilter提供的接口看不见设备对象和IRP的,所以编

一个简单的文件系统过滤驱动框架

很多人认为文件系统过滤驱动很复杂,其实也有一定道理,因为需要有很多细节需要考虑到,这是一个简单的文件系统过滤驱动,抛去了大部分细节,留下了一个简单的框架,其实这样文件系统过滤驱动就变得蛮简单的,很多接口可以不用实现,只要知道大致流程,其它都将会很清晰. #define DBG 1 #include <ntifs.h> #include "fsfilter.h" PDEVICE_OBJECT g_Cdo; PDRIVER_OBJECT g_MyDriver; NTSTATUS

USB

http://blog.csdn.net/myarrow/article/details/8279156 USB协议架构及驱动架构 1.1 USB主机系统 在USB主机系统中,通过根集线器与外部USB从机设备相连的处理芯片,称为USB主机控制器.USB主机控制器包含硬件.软件和固件一部分. 1.2 USB设备系统 USB设备按功能分为两部分:集线器(Hub)和功能部件.从下图可知,主机通过根集线器连接到各种外围设备(集线器和功能部件). 1.3 主机和设备之间通信模型     主机与设备之间的通

以蓝牙为背景剖析无线通信原理以及协议栈

前言: 基于传统点对点的架构,想要把家庭电脑和键盘.鼠标.耳机.麦克风.以及移动电话等等连接起来,可能还要考虑增加USB插口. 有没有一种通用的不需要用户干预的简便方法把各种电子设备连接在一起,而又不至于被线缆淹没呢?在WiFi之外,大家已经比较熟悉的"蓝牙"正是这样一种连接技术,它被设计为面向个人和家庭的无线式自动连接,其三大核心特点便是无线.低成本和自动化. 图1 蓝牙的无线连接模式 可是"蓝牙"是怎么实现的上述所说的"连接"的呢? 下面我们

Android API Guides---Sensors Overview

Sensors Overview 大多数Android手机都内置了用于测量运动,方向和各种环境条件的传感器.这些传感器能够提供原始数据具有较高的精度和准确度的,如果你想监控三维设备移动或定位是有用的,或者你想要监控的设备附近周围环境的变化.例如,一个游戏可以跟踪从设备的重力传感器读数来推测复杂的用户手势和动作,比如倾斜,摇动,旋转或摇摆.同样,天气应用程序可以使用设备的温度传感器和湿度传感器计算和报告露点或旅游应用程序可能使用的地磁传感器和加速度计报告罗盘方位. Android平台支持的传感器三