在Windows Phone应用中有一个应用程序清单(WMAppManifest.xml),其中对于不同的应用可以设定Capability来告知需要哪些特性或功能,详细内容可以参考官方文档: http://msdn.microsoft.com/zh-CN/library/windowsphone/develop/jj206936(v=vs.105).aspx

比如说,开发一个不需要麦克风的应用,就不需要ID_CAP_MICROPHONE标记,一般来说也都清理得差不多,但又有时候需要检查,比如我们在写一个触发震动的操作类库时候碰巧需要判定ID_CAP_SENSORS时该怎么办呢,微软没有提供相应的检查接口,所以只好自己来解决。

下面是针对于WP7的检查,WP8上也通用,只不过需要检查WP8自己特殊Capability,需要自己加一些代码。

/// <summary>
/// For Windows Phone 7
/// </summary>
static class CapabilityHelper
{
private const string WMAppManifest = "WMAppManifest.xml";
private const string ID_CAP_CONTACTS = "ID_CAP_CONTACTS";
private const string ID_CAP_NETWORKING = "ID_CAP_NETWORKING";
private const string ID_CAP_IDENTITY_DEVICE = "ID_CAP_IDENTITY_DEVICE";
private const string ID_CAP_IDENTITY_USER = "ID_CAP_IDENTITY_USER";
private const string ID_CAP_LOCATION = "ID_CAP_LOCATION";
private const string ID_CAP_SENSORS = "ID_CAP_SENSORS";
private const string ID_CAP_MICROPHONE = "ID_CAP_MICROPHONE";
private const string ID_CAP_MEDIALIB = "ID_CAP_MEDIALIB";
private const string ID_CAP_GAMERSERVICES = "ID_CAP_GAMERSERVICES";
private const string ID_CAP_PHONEDIALER = "ID_CAP_PHONEDIALER";
private const string ID_CAP_PUSH_NOTIFICATION = "ID_CAP_PUSH_NOTIFICATION";
private const string ID_CAP_WEBBROWSERCOMPONENT = "ID_CAP_WEBBROWSERCOMPONENT";
private const string CAPABILITIES = "Capabilities";
private const string NAME = "Name"; static CapabilityHelper()
{
try
{
Check();
}catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
static void Check()
{ using (var xmlreader = XmlReader.Create(WMAppManifest))
{
while (xmlreader.Read())
{
switch (xmlreader.NodeType)
{
case XmlNodeType.Element:
if (xmlreader.Name == "Capability")
{
var value = xmlreader.GetAttribute(NAME);
switch (value)
{
case ID_CAP_NETWORKING:
IsNetworkingCapability = true;
break;
case ID_CAP_IDENTITY_DEVICE:
IsDeviceIdentityCapability = true;
break;
case ID_CAP_IDENTITY_USER:
IsUserIdentityCapability = true;
break;
case ID_CAP_LOCATION:
IsLocationCapability = true;
break;
case ID_CAP_SENSORS:
IsSensorsCapability = true;
break;
case ID_CAP_MICROPHONE:
IsMicrophoneCapability = true;
break;
case ID_CAP_MEDIALIB:
IsMediaLibCapability = true;
break;
case ID_CAP_GAMERSERVICES:
IsGamerServicesCapability = true;
break;
case ID_CAP_PHONEDIALER:
IsPhoneDialerCapability = true;
break;
case ID_CAP_PUSH_NOTIFICATION:
IsPushNotificationCapability = true;
break;
case ID_CAP_WEBBROWSERCOMPONENT:
IsWebBrowserComponentCapability = true;
break;
case ID_CAP_CONTACTS:
IsContactsCapability = true;
break;
default:
break;
}
}
break;
default:
break;
}
}
}
}
public static bool IsNetworkingCapability { get;private set; }
public static bool IsDeviceIdentityCapability { get; private set; }
public static bool IsUserIdentityCapability { get; private set; }
public static bool IsLocationCapability { get; private set; }
public static bool IsSensorsCapability { get; private set; }
public static bool IsMicrophoneCapability { get; private set; }
public static bool IsMediaLibCapability { get; private set; }
public static bool IsGamerServicesCapability { get; private set; }
public static bool IsPhoneDialerCapability { get; private set; }
public static bool IsPushNotificationCapability { get; private set; }
public static bool IsWebBrowserComponentCapability { get; private set; }
public static bool IsContactsCapability { get; private set; }
}

希望能够给一些朋友带来帮助。

Windows Phone:如何检查WMAppManifest中的Capability属性的更多相关文章

  1. Swift中的类型属性(静态变量)

    http://blog.haohtml.com/archives/15098 Swift中的类型属性(静态变量) Posted on 2014/06/13 类型属性语法 在 C 或 Objective ...

  2. Robocopy是微软Windows Server 2003资源工具包中众多多用途的实用程序之一(它是基于强大的拷贝程序

    Robocopy是微软Windows Server 2003资源工具包中众多多用途的实用程序之一(它是基于强大的拷贝程序).没错,Robocopy的功能是拷贝文件,你也许会觉得无聊并且要翻阅下一篇文章 ...

  3. 如何添加地图控件到Windows Phone 8的页面中

    原文 如何添加地图控件到Windows Phone 8的页面中 本主题介绍了各种方法来添加一个地图控件到Windows Phone 8的项目.该地图控件在Windows Phone的SDK 8.0的库 ...

  4. C# 隐藏 Windows Phone 侦错模式中萤幕右上角的数据条(模拟器、实机可用),截图好方便。

    原文:C# 隐藏 Windows Phone 侦错模式中萤幕右上角的数据条(模拟器.实机可用),截图好方便. 一般我们在开发Windows Phone App时,会使用模拟器或是实体的手机开发,在Vi ...

  5. windows server 2008 R2域中的DC部署 分类: AD域 Windows服务 2015-06-06 21:09 68人阅读 评论(0) 收藏

    整个晚上脑子都有点呆滞,想起申请注册好的博客还从来都不曾打理,上来添添生机.从哪里讲起呢,去年有那么一段时间整个人就陷在域里拔不出来,于是整理了一些文档,害怕自己糊里糊涂的脑子将这些东西会在一觉醒来全 ...

  6. 结合windows消息系统理解C#中WndProc函数和DefWndProc函数

    Windows消息系统由3部分组成:     1.消息队列.Windows应用程序的消息是由Windows统一在一个消息队列中管理的.     2.消息循环.应用程序从Windows消息队列中获得自己 ...

  7. 强势解决:windows 不能在本地计算机中起动Tomcat参考特定错误代码1

    Tomcat添加系统服务:service.bat install 启动本服务的时候却提示“windows 不能在本地计算机中起动 Apache Tomcat参考特定错误代码1,若不是Microsoft ...

  8. 《Python CookBook2》 第一章 文本 - 检查字符串中是否包含某字符集合中的字符 && 简化字符串的translate方法的使用

    检查字符串中是否包含某字符集合中的字符  任务: 检查字符串中是否出现了某个字符集合中的字符 解决方案: 方案一: import itertools def containAny(seq,aset): ...

  9. 动态链接库中分配内存引起的问题-- windows已在XX.exe中触发一个断点

    动态链接库中分配内存引起的 本文主要是探讨关于在动态链接库分配的内存在主程序中释放所产生的问题,该问题是我在刚做的PJP工程中所遇到的,由于刚碰到之时感动比较诡异(这也是学识不够所致),所以将它写下来 ...

随机推荐

  1. Force.com微信开发系列(三)申请测试账号及回复图文消息

    Force.com除了简单的文本消息回复外,还能回复图文并茂的消息.能回复音乐或者视频.能对用户发来的语音进行识别.能够搜集用户的地理位置信息并提供相应的内容或服务等,本文将对这些技能一一展开说明,在 ...

  2. Echarts ecomfe 触摸屏 touch 在IE10下无法显示悬浮框

    问题描述: Windows 8 IE10浏览http://echarts.baidu.com/doc/example/line2.html 时,鼠标放置在数据点上时无法显示悬浮框. 正常情况为: 而现 ...

  3. 2015年第13本(英文第9本):Murder on the Orient Express 东方快车谋杀案

    书名:Murder on the Orient Express 东方快车谋杀案 作者:Agatha Christie 单词数:6.1万 不重复单词数:不详 首万词不重复单词数:不详 蓝思值:640 阅 ...

  4. 桥牌笔记:Show up Squeeze显露挤牌法

    南主打4S,注意一个叫牌过程,西家叫过加倍,东家应叫过2D. 西连打红桃K.A,然后再打红桃J让东家将吃.东家上手后,回小方块.此时庄家已经失了3墩了,如何完成这个4S? 庄家必须拿到所有剩下的牌墩. ...

  5. 【转】c++中引用的全方位解读

    对于习惯使用C进行开发的朋友们,在看到c++中出现的&符号,可能会犯迷糊,因为在C语言中这个符号表示了取地址符,但是在C++中它却有着不同的用途,掌握C++的&符号,是提高代码执行效率 ...

  6. UIButton 内部介绍

    **     设置内容距btn边框距离     **/    btn.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);        /** 将lab ...

  7. 实验:传输层:TCP协议

    一.概述 TCP和UDP处在同一层——运输层,但是它们有很多的不同.TCP是TCP/IP系列协议中最复杂的部分,它具有以下特点: (1) TCP提供 可靠的 数据传输服务,TCP是 面向连接的 .应用 ...

  8. 设计模式-01-MVC

    概述 Model-View-Controller(MVC),即模型-视图-控制器. MVC将软件系统分成三大部分:Model,View,Controller,三个部分通过某种机制通信 M.V.C的职能 ...

  9. MongoDB学习笔记——数据库安装及配置

    MongoDB数据库安装 MongoDB官方下载地址:https://www.mongodb.com/download-center 首先需要根据Windows版本选择正确的MongoDB版本进行安装 ...

  10. Cocos2d-x解析XML文件,解决中文乱码

    身处大天朝,必须学会的一项技能就是解决中文显示问题.这个字符问题还搞了我一天,以下是个人解决乱码问题的实践结果,希望可以给其他人一些帮助 读取xml文件代码: CCDictionary* messag ...