在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. ListView属性整理

    stackFromBottom属性,这只该属性之后你做好的列表就会显示你列表的最下面,值为true和false android:stackFromBottom="true"   第 ...

  2. Google可能会用苹果的Swift 为什么?

    Google可能会用苹果的Swift 为什么? 2014 年夏天,苹果在 WWDC 大会上宣布了全新的程序语言 Swift,主要用来开发 iOS 与 OSX 应用. 去年年底,苹果将 Swift 开源 ...

  3. Java 网络编程----基本概念

    网络现在是一个非常普遍的概念. 以下是维基百科上的解释: 网络一词有多种意义,可解作: 网络流也简称为网络(network).一般用于管道系统.交通系统.通讯系统建模. 有时特指计算机网络. 或特指其 ...

  4. animation of android (2)

    android Interpolator 首先是android系统提供的变换方式: 这些方式将转载一篇文章: 转: http://www.cnblogs.com/mengdd/p/3346003.ht ...

  5. python简单的爬虫,网页图片

    1 #!/usr/bin/python 2 #coding=utf-8 3 import urllib 4 import re 5 6 def gethtml(url): 7 page=urllib. ...

  6. Effective Java 47 Know and use the libraries

    Advantages of use the libraries By using a standard library, you take advantage of the knowledge of ...

  7. VISUAL STUDIO 调试

    调试术语 Visual Studio调试之断点基础篇 Visual Studio调试之断点进阶篇 不能设置断点的检查步骤 Visual Studio调试之断点技巧篇 Visual Studio调试之断 ...

  8. Sublime text3中配置Github

    一.Git安装 到Git的 官网 上去下载相应环境的Git安装文件. 我的是win10,安装到D:\ProgramFiles\Git,在桌面右键出现下面两个红色框框就可以了. 二.Git配置及生成密钥 ...

  9. UEdit初始化加载内容偶尔失败,解决

    var ue1 = UE.getEditor('aaa',{toolbars: [],autoHeightEnabled: false}); $(function(){ var content =$( ...

  10. sublime学习

    1:goto anything 特性 快捷键  ctrl + P    @  : # 使用 2:多行游标功能 快捷键 ctrl + D     ctrl + K 跳过选择 alt + F3 多选 产生 ...