在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. SharePoint中Event Handler的触发

    一直以来对于Event Handler的感觉就是:添加.编辑和删除动作之前和动作之后,我们在SharePoint系统中可以做的一些事情 不过在最近处理的一个问题中,发现它在触发时机上出了一点问题   ...

  2. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q32-Q34)

    Question 32You create a custom Web Part.You need to ensure that a custom property is visible in Edit ...

  3. C语言指针的长度和类型

    本文地址:http://www.cnblogs.com/archimedes/p/point-length-type.html,转载请注明源地址. 如果考虑应用程序的兼容性和可移植性,指针的长度就是一 ...

  4. iOS 你将会遇到的

    1.解释ARC原理,ARC引入之后,iOS增加了几个修饰符,分别是什么?并解释何时应该使用? 2.给你一个可变数组aMutableArray,请写出你认为较好的算法代码. 3.UITableView是 ...

  5. 阶乘 求n!中质因数的个数

    在n!中末尾有几个0 取决于n!中5的个数(2肯定比5多) 所以遍历从1到n的数,看总共有几个5即可 ..N do j = i; == ) ++ret; j /= ; end end 有个nb的方法: ...

  6. Effective Java 49 Prefer primitive types to boxed primitives

    No. Primitives Boxed Primitives 1 Have their own values Have identities distinct from their values 2 ...

  7. 微信开发(03)之新建按钮时报错 errcode 40054

    在微信开发新建公众号的按钮时,报错如下: {errcode:40054,errmsg:"invalid sub button url domain"} 经过仔细排查,发现是url地 ...

  8. DataTable转List<Model>通用类

    /// <summary> /// DataTable转List<Model>通用类[实体转换辅助类] /// </summary> public class Mo ...

  9. Plus One

    Plus One https://leetcode.com/problems/plus-one/ Given a non-negative number represented as an array ...

  10. 设置html的div中背景图片长宽

    使用以下可行 background-size:1040px 482px;