Windows Phone:如何检查WMAppManifest中的Capability属性
在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属性的更多相关文章
- Swift中的类型属性(静态变量)
http://blog.haohtml.com/archives/15098 Swift中的类型属性(静态变量) Posted on 2014/06/13 类型属性语法 在 C 或 Objective ...
- Robocopy是微软Windows Server 2003资源工具包中众多多用途的实用程序之一(它是基于强大的拷贝程序
Robocopy是微软Windows Server 2003资源工具包中众多多用途的实用程序之一(它是基于强大的拷贝程序).没错,Robocopy的功能是拷贝文件,你也许会觉得无聊并且要翻阅下一篇文章 ...
- 如何添加地图控件到Windows Phone 8的页面中
原文 如何添加地图控件到Windows Phone 8的页面中 本主题介绍了各种方法来添加一个地图控件到Windows Phone 8的项目.该地图控件在Windows Phone的SDK 8.0的库 ...
- C# 隐藏 Windows Phone 侦错模式中萤幕右上角的数据条(模拟器、实机可用),截图好方便。
原文:C# 隐藏 Windows Phone 侦错模式中萤幕右上角的数据条(模拟器.实机可用),截图好方便. 一般我们在开发Windows Phone App时,会使用模拟器或是实体的手机开发,在Vi ...
- windows server 2008 R2域中的DC部署 分类: AD域 Windows服务 2015-06-06 21:09 68人阅读 评论(0) 收藏
整个晚上脑子都有点呆滞,想起申请注册好的博客还从来都不曾打理,上来添添生机.从哪里讲起呢,去年有那么一段时间整个人就陷在域里拔不出来,于是整理了一些文档,害怕自己糊里糊涂的脑子将这些东西会在一觉醒来全 ...
- 结合windows消息系统理解C#中WndProc函数和DefWndProc函数
Windows消息系统由3部分组成: 1.消息队列.Windows应用程序的消息是由Windows统一在一个消息队列中管理的. 2.消息循环.应用程序从Windows消息队列中获得自己 ...
- 强势解决:windows 不能在本地计算机中起动Tomcat参考特定错误代码1
Tomcat添加系统服务:service.bat install 启动本服务的时候却提示“windows 不能在本地计算机中起动 Apache Tomcat参考特定错误代码1,若不是Microsoft ...
- 《Python CookBook2》 第一章 文本 - 检查字符串中是否包含某字符集合中的字符 && 简化字符串的translate方法的使用
检查字符串中是否包含某字符集合中的字符 任务: 检查字符串中是否出现了某个字符集合中的字符 解决方案: 方案一: import itertools def containAny(seq,aset): ...
- 动态链接库中分配内存引起的问题-- windows已在XX.exe中触发一个断点
动态链接库中分配内存引起的 本文主要是探讨关于在动态链接库分配的内存在主程序中释放所产生的问题,该问题是我在刚做的PJP工程中所遇到的,由于刚碰到之时感动比较诡异(这也是学识不够所致),所以将它写下来 ...
随机推荐
- 中国象棋引擎的C#源代码
以前写的中国象棋引擎的C#源程序,可在VS2010中编译运行,由于个人精力有限,难以完成后续的开发工作,如果谁感兴趣,请关注微信公众号(“申龙斌的程序人生”,ID:slbGTD),发送后台消息“象棋引 ...
- vc6.0连接mysql数据库
一.MySQL的安装 Mysql的安装去官网下载就可以...最新的是5.7版本.. 二.VC6.0的设置 (1)打开VC6.中选0 工具栏Tools菜单下的Options选项,在Directories ...
- C语言可变参数函数实现原理
一.可变参数函数实现原理 C函数调用的栈结构: 可变参数函数的实现与函数调用的栈结构密切相关,正常情况下C的函数参数入栈规则为__stdcall, 它是从右到左的,即函数中的最右边的参数最先入栈. 本 ...
- C语言-06-复杂数据类型
一.数组 1> 数组的定义和初始化 定义 ① 数组定义了同种类型数据的集合 ② 定义数组时,数组必须有固定的长度 初始化 ① 如果在定义数组时,初始化数组,数组元素的个数必须是常量 ② 如果不在 ...
- Java部分总结图片版2(已加上原图链接!!!)
Java部分总结图片版2(加上原图链接)
- 数据库性能优化之SQL语句优化
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写等是体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...
- selinux开启关闭
查看SELinux状态: 1./usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: ...
- Cordova or Xamarin 用.net开发IOS和Android程序
Visual Studio 2015 和 Apache Cordova 在开始前,问一下自己下面这些问题: 熟练掌握web技术的开发者比例是多少?(占所有开发者的比例) 熟练掌握移动开发技术(并且使用 ...
- [转] Paxos算法2-算法过程(实现)
请先参考前文:Paxos算法1 1.编号处理 根据P2c ,proposer在提案前会先咨询acceptor查看其批准的最大的编号和value,再决定提交哪个value.之前我们一直强调更高编号的pr ...
- InfluxDB Cli中查询结果中time格式显示设置
InfluxDB Cli中,time默认显示为19位时间戳格式,平时查询起来特不方便,那么,如何设置成为我们人类能看懂的时间格式呢? 方法有二: 1.$ influx -precision rfc33 ...