Win(Phone)10开发第(7)弹,Extended Execution
众所周知,在WindowsPhone8中,app在转入后台并且没有挂起的这段时间是可以继续运行的,此时可以继续执行程序的操作,这个功能在位置追踪app中时很有用的,当接电话来短信或者锁屏后不影响程序运行,然而在uap中,这个功能很遗憾的被取消了。
此时想要app锁屏后继续运行的话,需要用到ExtendedExecution,以便在手机锁屏后,挂起前,可以继续进行位置追踪。
ExtendedExecution的用法很简单:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
private async void StartLocationExtensionSession()
{
session = new ExtendedExecutionSession();
session.Description = "Location Tracker";
session.Reason = ExtendedExecutionReason.LocationTracking;
session.Revoked += ExtendedExecutionSession_Revoked;
var result = await session.RequestExtensionAsync();
if (result == ExtendedExecutionResult.Denied)
{
MessageDialog md = new MessageDialog("ExtendedExecution Denied.");
await md.ShowAsync();
}
}
|
ExtendedExecutionReason有3种,LocationTracking,SavingData,Unspecified,分别对应着位置追踪,保存数据,和其他操作。如果选择了前两种,但是却没有对应方法,则会获得ExtendedExecutionResult.Denied的result.比如:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
DoWork();
StartLocationExtensionSession();
}
private async void DoWork()
{
for (int i = 0; i < 1000; i++)
{
Debug.WriteLine(i);
await Task.Delay(1000);
}
}
private async void StartLocationExtensionSession()
{
session = new ExtendedExecutionSession();
session.Description = "Location Tracker";
session.Reason = ExtendedExecutionReason.LocationTracking;
var result = await session.RequestExtensionAsync();
if (result == ExtendedExecutionResult.Denied)
{
MessageDialog md = new MessageDialog("ExtendedExecution Denied.");
await md.ShowAsync();
}
}
|
实际上并没有LocationTracking的操作,这时候就会被拒绝。
在使用中,RequestExtensionAsync在正确选择了Reason的情况下,没有遇到Denied的情况ExtendedExecutionSession_Revoked注册的废除事件
|
1
2
3
4
|
private void ExtendedExecutionSession_Revoked(object sender, ExtendedExecutionRevokedEventArgs args)
{
Debug.WriteLine($"ExtendedExecutionSession_Revoked:{ExtendedExecutionRevokedReason.SystemPolicy}");
}
|
取到的 ExtendedExecutionRevokedReason 有2个,一个SystemPolicy,发生在解锁后恢复前台运行时 另一个Resumed发生在挂起恢复时。
然而经过尝试,SystemPolicy导致的Revoked发生后,继续锁屏,依然可以运行,然后解锁后,不再触发Revoked事件。
当位置追踪或者保存数据结束,将session Dispose掉,重复的RequestExtensionAsync会报错。并且本着省电的原则,当需要时请求,不需要时候注销掉。
|
1
2
3
4
5
|
if (session != null)
{
session.Dispose();
session = null;
}
|
这样就可以锁屏后继续运行app了。
在使用过程中,注意到有另一个类:ExtendedExecutionForegroundSession,用法跟ExtendedExecutionSession几乎完全一致,它的Reason有四种:BackgroundAudio,SavingData,Unconstrained,Unspecified。
但经过尝试,无论如何RequestExtensionAsync的结果都是Denied。而且没有文档说明,因此并不知道具体有什么用。如有知道的欢迎答疑解惑
更多=> http://www.liubaicai.net/
Win(Phone)10开发第(7)弹,Extended Execution的更多相关文章
- Win(Phone)10开发第(5)弹,本地媒体服务器的一些注意事项
首先有个wp上的http服务器 http://wphttpserver.codeplex.com/ 使用方式: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...
- Win(Phone)10开发第(4)弹,HTTP 实时流播放 m3u8
其实这篇只有一句话,win10原生支持HLS啦 1 2 3 AdaptiveMediaSourceCreationResult amsResult = await AdaptiveMediaSourc ...
- Win(Phone)10开发第(3)弹,简单的Demo程序网络请求json解析列表显示
先分享一个由Json字符串直接生成解析对应的类的工具: jsonclassgenerator14 百度天气接口 下面是由一个小功能(又特么的是天气)的实现,记录下下UAP的流程和结构(其实跟之前一模一 ...
- Win(Phone)10开发第(2)弹,导出APPX包并签名部署
当我们新建一个win10 uap项目,如果想导出测试包,需要点击项目名称,选择商店-导出应用包,这个时候会生成一个文件夹,包含appx和ps1等文件. powershell运行Add-AppDevPa ...
- Win(Phone)10开发第(1)弹,桌面和手机的扩展API,还我后退键
喜大普奔的win10 uap开发预览版终于出了,这次更新跟8.1的变化不是很大,但是将原本win8.1和wp8.1uap的分项目的形式,改为了整合成一个项目,经过一次编译打包成一个appx包,实现了无 ...
- Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构
分享两篇Win 10应用开发的XML文档结构:Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构. Win 10 开发中Adapt ...
- 一网成擒全端涵盖,在不同架构(Intel x86/Apple m1 silicon)不同开发平台(Win10/Win11/Mac/Ubuntu)上安装配置Python3.10开发环境
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_200 时光荏苒,过隙白驹,即将进入2022年,著名敏捷开发语言Python也放出了3.10最终版,本次我们来展示一下在不同的系统和 ...
- Windows 10开发基础——文件、文件夹和库(一)
原文:Windows 10开发基础--文件.文件夹和库(一) 主要内容: 1.枚举查询文件和文件夹 2.文本文件读写的三种方法——创建写入和读取文件 3.获得文件的属性 枚举查询文件和文件夹 先了解一 ...
- 我的长大app开发教程第一弹:Fragment布局
在接下来的一段时间里我会发布一个相对连续的Android教程,这个教程会讲述我是如何从零开始开发“我的长大”这个Android应用. 在开始之前,我先来介绍一下“我的长大”:这是一个校园社交app,准 ...
随机推荐
- 利用Google Chrome开发插件,在网页中植入js代码
Google Chrome是一个很强大的浏览器,提供了各种各样的插件,大大提升了使用了的效率,比如vimium.honx等. Google在提供这些插件的同时还允许用户开发自己的插件. 最近在写js的 ...
- sql不带锁查询
原文 sql server在执行查询语句时会锁表.在锁表期间禁止增删改操作. 如果不想锁表,那就再表名或别名后面加上WITH(NOLOCK) 如下所示: SELECT Id FROM dbo.T_Ta ...
- viewstamp replication: A new primary copy method to support highly-avaliable d
为了提高服务能力或者服务稳定,往往需要把数据重复布署,也就是replication.重复带来的问题是,更新的时候会带来不一致.一种比较简单的方法是,在N台重复的机器里选一台作为主机,其他作备份,只能通 ...
- maven仓库的作用以及仓库的分类
maven的工作需要从仓库下载一些jar包,如下图所示,本地的项目A.项目B等都会通过maven软件从远程仓库(可以理解为互联网上的仓库)下载jar包并存在本地仓库,本地仓库 就是本地文件夹,当第二次 ...
- Window 编码 UTF-8 BOM 说明
UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM.所以不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一 ...
- poj3017 Cut the Sequence 单调队列 + 堆 dp
描述 把一个正数列 $A$分成若干段, 每段之和 不超过 $M$, 并且使得每段数列的最大值的和最小, 求出这个最小值. 题目链接 题解 首先我们可以列出一个$O(n^2)$ 的转移方程 : $F_i ...
- Ubuntu下部分软件的简介及安装
1.安装linux摄像头应用软件cheese sudo apt-get install cheese 2.Ubuntu Tweak Ubuntu Tweak是一款专门为Ubuntu(GNOME桌 ...
- 获取GUID的GET网址:createguid.com
1.在浏览器的地址栏中输入createguid.com,回车之后即可得到一个GUID 2.在JMeter中可以这样填写HTTP Request 然后通过正则表达式提取器提取GUID <texta ...
- 低配NOSQL
东西写的太简单了 都不好意思说是NOSQL 其实就是STL 的map容器记录了写入的信息 解析了下数据仅此. 分析的时候想了很多 比如学习redis的自写hash,动态调整hash表容量. 比如右值或 ...
- Cordova学习
Cordova学习 ui线程里处理耗时逻辑 runOnUiThread(new Runnable() { public void run() { //处理 } });