无论你是用Silverlight还是用RT的API来开发,在使用MediaCapture拍照片或录视频时,要是在模拟器上运行会万事大吉;但是,一旦放到真实手机上运行,肯定有人发现了,细心的朋友肯定发现了——不知道为什么,会经常导致手机重启,或者死机。

啊,顺便给大家说说,死机不可怕,也不用重置,也不用刷机,不会丢失资料的,你只要同时按下“音量减”+“电源”两个键,要同时按住,不要放开,大约等10多秒后,会关机,然后你再放开这两个键,这样手机就软启了,不会丢失数据。

不过,如果你的运营商(如中国联通)的基站没有实时更新时间的功能,那么,手机在软启后时间会不准,你可以手动调整一下。有些人说:不是设置了自动更新时间吗?怎么会不准了呢?注意WP上的自动更新时间不是用网络连接来更新的,而是通过移动运营商的基站来更新的,我的中国移动卡会得到基站的数据,但时间不准,会慢了半个小时。

好了,上面说的废话太多,我担心有人会扔砖头。我们当Coder的一定要有耐心做事的好习惯,不然你真的不是好Coder,不要一遇到问题就在那里骂外公骂娘的,也不要在那里踢桌子砸凳子,因为你没有那样的功力,桌子没踢坏你的脚就会痛得不行。

调用摄像头API导致死机的原因是:应用程序占用了系统的资源,也就是说你的应用没有及时释放相关资源导致的,一般这种情况多发生在调试的时候,因为我们通常在调试时会直接在VS上结束应用程序,如此一来,清理资源的代码就没有执行,系统资源仍然被你占着,所以一旦再次执行应用程序,或者运行其他相机应用,就会导致系统在无限等待,于是就死机了。

要释放MediaCapture对象其实很简单,只要调用它的Dispose方法即可,关键是,要在哪里调用。

为了安全保险,应该中导航离开页面时释放(处理OnNavigatingFrom方法),或者在应用程序不在前台运行时释放,当再次回到应用程序时,重新实例化MediaCapture对象。这样做的好处既能及时释放资源,而且在你的应用程序发送到后台后,你不能保证其他程序不会调用摄像头,不然,资源老被你占着,别人没法用了。

以Silverlight框架为例,可以在App类中定义一些成员来初始化和清理MediaCapture。

    public sealed partial class App{MediaCapture capture = null;/// <summary>/// 通过该属性获得MediaCapture实例/// </summary>internal MediaCapture PhotoCaptureForCurrent{get { return capture; }}/// <summary>/// 初始化/// </summary>internal async Task InitailizeCapture (){var devs = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);DeviceInformation bc = devs.FirstOrDefault(d => d.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back);if (bc != null){MediaCaptureInitializationSettings settings = new MediaCaptureInitializationSettings();settings.AudioDeviceId = "";settings.VideoDeviceId = bc.Id;capture = new MediaCapture();await capture.InitializeAsync(settings);}}/// <summary>/// 清理/// </summary>internal void ClearupCapture (){if (capture != null){capture.Dispose();capture = null;}}}

在调用Dispose方法后,把MediaCapture变量设置为null引用,这样就算清理方法被多次调用也不会出错。

为了安全保险,清理方法有可能被重复调用。因为我会考虑在页面离开时调用一次,在应用程序被放入后台时调用一次,在应用程序关闭时调用一次。

有人会问,为什么要这样?因为1、离开页面;2、应用被停用(不在前台);3、应用关闭

这三件事你无法保证它都发生,有时候,可能1发生,但2和3不会发生。

例如:

当运行应用程序后,我突然按了一个“开始”键,这时候会回到开始屏幕。此时,导航离开页面会发生,应用程序的DeActived事件会发生,但是,应用程序的关闭事件不会发生。

总之,在这三件事发生时都清理一次,可保万全。

A、在导航离开页面时,清理。

        protected override void OnNavigatingFrom ( NavigatingCancelEventArgs e ){……(App.Current as App).ClearupCapture();}

B、应用被发送到后台时,清理。

        private void Application_Deactivated ( object sender, DeactivatedEventArgs e ){ClearupCapture();}

即响应Deactivated事件。

C、当应用关闭时,清理。

        private void Application_Closing ( object sender, ClosingEventArgs e ){ClearupCapture();}

即处理Closing事件。

用Runtime API调用摄像头时要谨慎,尤其是在调试的时候,最好,先在手机上先把应用关闭,再从VS上结束应用程序

不是骗你,经过我近一个星期N多次的测试,这样做确实不会死机,在测试过程中,我那台可怜的Lumia 920不知道死了多少次。记住,有借有还,再借不难。占用系统资源一定要释放。

下面,顺便附上我写的一个测试示例,如果大家不嫌我这个示例太垃圾的话,可以下来玩玩。

http://files.cnblogs.com/tcjiaan/AppCamera.zip

我比较头痛的另一件事是:不同手机的硬件差异,摄像头的角度经常会偏了,920的摄像头是旋转了90度,这个问题说好办也好办,说不好办也挺难办,因为目前移植的RT库中,貌似不能旋转。

【WP 8.1开发】解决调用真实摄像头会死机的问题相关推荐

  1. 彻底解决诺基亚E71接电话死机的方法

    看到许多网友在论坛里,说自己的诺基亚E71手机在接电话时易死机,没太在意,没想到昨天一个朋友同样拿来一台诺基亚E71给我看,称接电话就死机,于是决定开始研究研究,诺基亚E71手机的接电话死机问题,下面 ...

  2. 解决mac 休眠后唤醒死机问题

    MacBook 升级到最新的Catalina系统后, 机器进入睡眠,8小时后唤醒(系统默认切断供电时间 [autopoweroffdelay]),在登录界面,输入密码后直接卡死/或者直接黑屏: 试过以 ...

  3. android相机故障代码解决方法,Android相机服务器死机和相机错误 – 100

    我在测试我的Android应用程序时遇到Camera错误100,我在StackOverflow上找到了一些主题,但它们并没有那么有用.我正在寻找解决错误的相关解决方案. 我写的代码: mrec = n ...

  4. 一招完美解决SSD系统盘卡顿死机的问题!

    小编自从在电脑上配备了一块SATA SSD作为系统盘, 电脑运行比之前的机械硬盘快了很多,浏览网页,玩游戏都很流畅了. 可是,最近小编发现电脑经常会出现卡顿,或者重启的时候会卡机,这让小编愉悦的心情平 ...

  5. 添加摄像头时服务器中断,无法连接到摄像头服务/摄像头服务器死机

    我需要一些帮助.我们创建了一个仅使用前置摄像头的应用程序.但是在某些设备上我们遇到了问题.因此,在某些设备上,Camera.open()方法会抛出异常: Failed to connect to ca ...

  6. 解决电脑开启游戏就死机 开启大型的软件就死机(这个问题困惑我两月,我本来想用电脑玩游戏的,就是这个两月把我戒了)

    首先你确保你的软件下载完毕,电脑一切固件正常 配置可以 下面开始 打开你的blos启动-->找到CPUconfiguration-->找到VT(全写我忘记啦!实在抱歉哈)-->把di ...

  7. 小米盒子老是服务器无响应,教你解决小米盒子黑屏死机等故障解决办法!

    在电视盒子出现的故障中,黑屏往往是用户们最常碰到的,对于时下最受用户欢迎的小米盒子也不例外.究其原因,可能是两大原因导致的.下面就从根源上分析造成小米盒子黑屏的原因,并给出相应的解决方案. 原因一.系 ...

  8. 解决VMware Workstation 系统繁忙死机黑屏

    在一个评论区看到的,确实好用 1.按"win +R"组合键,进入"运行". 2.写入"msconfig"(不包括引号,可直接复制),按回车键 ...

  9. C语言运行时电脑白屏怎么办,win10电脑白屏死机无响怎么回事_win10电脑白屏死机无响七种解决方法...

    win10专业版使用一段时间后出现白屏死机的问题,开机后不是登录界面,而是白色屏幕,尝试多次还是一样,怎么办呢?此故障原因无非是硬件或软件两大原因,有什么办法解决呢?此文小编告诉大家解决win10电脑 ...

最新文章

  1. 《将要淘汰的八种人》读后感
  2. Python 3/前端 画图工具:Matplotlib,canvajs,pyecharts
  3. JAVA中的枚举小结
  4. 图书网上商城blog
  5. mybatis-generator 插件扩展,生成支持多种数据库的分页功能
  6. pyqt5从子目录加载qrc文件_【JVM系统学习之路】一篇看懂类加载
  7. SQL疑难杂症【4 】大量数据查询的时候避免子查询
  8. 家庭组计算机无法,【求助】Windows无法从该家庭组中删除你的计算机
  9. 计算机地址栏搜索不了网,我的电脑地址栏不见了怎么办 地址栏不见了如何解决...
  10. Java基础系列13:JDBC批处理简介
  11. 万能批处理工具包最终版
  12. Python之基础语法
  13. 【实现windowsxp系统自动快速装机的方法】
  14. zblog html代码,简单快速修改zblog模板的重要代码
  15. [原创]VC成功实现重启路由器(完整源码)
  16. JAVA类计算机专业毕业设计题目课题选题
  17. 学习新手给Android新手的一些学习建议
  18. SpringBoot2.0(九):实现微信授权登录并且获取用户信息
  19. 广州大学 计算机网络实验3 使用网络协议分析器捕捉和分析协议数据包 2020版
  20. ultraedit许可证id 7位数字_优雅的数据库ID设计

热门文章

  1. 1222. 密码脱落 区间dp
  2. 什么是Vue-cil?
  3. iOS 微信 7.0.16 内测更新!支持只删除聊天列表不删除聊天记录!附内测地址!
  4. java根据IP获取当前区域天气信息
  5. 享元模式(结构型模式)
  6. python任务定时运行库 schedule 模块
  7. 三菱伺服MR-JE-C与三菱FX-5UPLC进行两轴CCLINK-Basic总线通信程序
  8. Ubuntu16.04 解决屏幕闪烁的问题(暂时)
  9. 那些靠熬夜水续命的年轻人
  10. EasyPoi导出图片