C# Windows Phone App 开发,修改【锁定画面】,从【Assets】、【UI】、【网路图片】,并解决失灵问题。
原文:C# Windows Phone App 开发,修改【锁定画面】,从【Assets】、【UI】、【网路图片】,并解决失灵问题。
一般我们在开发Windows Phone App,有时会希望透过应用程式来改变锁定画面,但是锁定画面的设定有时会发生非常吊诡的现象,譬如锁定画面只会在第一次设定的时候成功,第二次之後全数失败,而且没有发生任何错误,这究竟是为什麽呢?!
?
本篇文章将引导您修改【锁定画面】,从【Assets】、【UI】、【网路图片】,并解决失灵问题。
?
制作修改锁定画面的APP必须要先修改【WMAppManifest.xml】
并接着【Tokens】的标签後贴上写下 :
?
1: <Extensions>
2: <Extension ExtensionName="LockScreen_Background" ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default" />
3: </Extensions>
?
就像这个样子
?
![]()
?
如此一来才能向系统注册,本APP需要获得修改锁定画面的权限。
?
然後要稍微提一下程式码的方法,方法呢其实是将图档写入IsolateStorage中,
然後在存取IsolateStorage的档案转换成Uri後再设定成锁定画面,
等会儿您会看见我在程式码中加入了FileNameA和FileNameB的部分,
主要是因为 Lock screen background for Windows Phone 8 中提到
?
Unique image names
If you update the lock screen background image from isolated storage, you'll need to provide a unique file name on each update. An easy way to accomplish this is to implement A/B switching logic for the file names.
?
实作两个档名来放置锁定画面背景的图档,
SUKI有试过,若只使用同一个档名去修改锁定背景图时完全失灵,
锁定背景图不会被更换,但是也不会出现任何的错误讯息
?
所以我们要使用FileNameA与FileNameB
?
接着就是程式码的部份了,说明一一打在程式码内了,客观慢用
?
1: private async void SetLockScreen()
2: {
3: //判断该APP是否已向系统申请修改锁定画面
4: var isProvider = Windows.Phone.System.UserProfile.LockScreenManager.IsProvidedByCurrentApplication;
5: //若尚未申请
6: if (!isProvider)
7: {
8: //跳出视窗询问使用者,是否授权该APP可以修改锁定画面
9: var op = await Windows.Phone.System.UserProfile.LockScreenManager.RequestAccessAsync();
10: isProvider = op == Windows.Phone.System.UserProfile.LockScreenRequestResult.Granted;
11: }
12: ?
13: //从Assets中的资源设定锁定画面
14: Uri url = new Uri("Assets/Tiles/FlipCycleTileLarge.png", UriKind.Relative);
15: BitmapImage bitmapImage = new BitmapImage();
16: bitmapImage.CreateOptions = BitmapCreateOptions.None;
17: bitmapImage.UriSource = url;
18: bitmapImage.ImageOpened += (s, e) =>
19: {
20: //下载完成
21: WriteableBitmap wbm = new WriteableBitmap((BitmapImage)s);
22: //将Bitmap转换成WriteableBitmap
23: Uri uri_Net = new Uri(WriteImageToFile(new WriteableBitmap(wbm)), UriKind.Absolute);
24: //设定锁定画面
25: Windows.Phone.System.UserProfile.LockScreen.SetImageUri(uri_Net);
26: };
27: ?
28: ?
29: //从网路图片设定锁定画面
30: Uri url_Net = new Uri("http://ppt.cc/vJH3", UriKind.Absolute);
31: BitmapImage bitmapImage_Net = new BitmapImage();
32: bitmapImage_Net.CreateOptions = BitmapCreateOptions.None;
33: bitmapImage_Net.UriSource = url;
34: bitmapImage_Net.ImageOpened += (s, e) =>
35: {
36: //下载完成
37: WriteableBitmap wbm = new WriteableBitmap((BitmapImage)s);
38: //将Bitmap转换成WriteableBitmap
39: Uri uri_Net = new Uri(WriteImageToFile(new WriteableBitmap(wbm)), UriKind.Absolute);
40: //设定锁定画面
41: Windows.Phone.System.UserProfile.LockScreen.SetImageUri(uri_Net);
42: };
43:
44: ?
45: ?
46: //从UI设定锁定画面
47: Uri uri_UI = new Uri(WriteImageToFile(new WriteableBitmap(LayoutRoot, null)), UriKind.Absolute);
48: Windows.Phone.System.UserProfile.LockScreen.SetImageUri(uri_UI);
49: }
50: ?
51:
52: ?
53: //档案写入Isolate 回传 Uri路径
54: private string WriteImageToFile(WriteableBitmap writeable_bitmap)
55: {
56: //档名A
57: string FileNameA = "A.jpg";
58: //档名B
59: string FileNameB = "B.jpg";
60: //最後使用的党名
61: string FileName = "";
62: try
63: {
64: ?
65: using (IsolatedStorageFile tStorage = IsolatedStorageFile.GetUserStoreForApplication())
66: {
67: //宣告存取IsolatedStorageFile的变数
68: var isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();
69: ?
70: //若为第一次A、B都不存在
71: if (!isolatedStorage.FileExists(FileNameA) && !isolatedStorage.FileExists(FileNameB))
72: {
73: //使用其中一个当作档名
74: FileName = FileNameA;
75: }
76: //若A存在则使用B名称来当作写入的档名
77: if (isolatedStorage.FileExists(FileNameA))
78: {
79: //删除A
80: isolatedStorage.DeleteFile(FileNameA);
81: //使用档名B
82: FileName = FileNameB;
83: }
84: //若B存在则使用A名称来当作写入的档名
85: if (isolatedStorage.FileExists(FileNameB))
86: {
87: //删除B
88: isolatedStorage.DeleteFile(FileNameB);
89: //使用档名A
90: FileName = FileNameA;
91: }
92:
93: Debug.WriteLine(FileName);
94: //在独立存储区创建档案
95: IsolatedStorageFileStream fileStream = isolatedStorage.CreateFile(FileName);
96: //写入JPG图档,品质为100 (越低图片画质就越低)
97: writeable_bitmap.SaveJpeg(fileStream, writeable_bitmap.PixelWidth, writeable_bitmap.PixelHeight, 0, 100);
98: //关闭IO
99: fileStream.Close();
100: fileStream.Dispose();
101: tStorage.Dispose();
102: ?
103: }
104: //重组新的URI,并回传
105: return string.Format("ms-appdata:///local/{0}", FileName);
106: }
107: catch (Exception ex)
108: {
109: string tMsg = ex.Message;
110: return string.Empty;
111: }
112: }
?
如此一来修改锁定画面就是一件简单的事情了!
?
References :
WP8 LockScreen IsolatedStorageFile 锁定屏幕 不会改变 C#
?
文章中的叙述如有观念不正确错误的部分,欢迎告知指正 谢谢
转载请注明出处,并且附上本篇文章网址 !? 感谢。
HOLIESTAR
DotBlogs Tags:
关连文章
[笔记]C# Windows Phone App 开发,邀请使用者对APP评分。
C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面。
Windows Phone 使用,改善Windows Phone 将照片同步到SkyDrive云端空间的【相片】、【影片】画质。
Windows Phone 使用,解决待机时WIFI网路自动断线的困扰。
C# Windows Phone App 开发,修改【锁定画面】,从【Assets】、【UI】、【网路图片】,并解决失灵问题。的更多相关文章
- C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面。
原文:C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从[网路图片].[Assets资源].[UI]修改锁定画面. 一般我们在开发Windows ...
- 打造理想的Windows 10 APP开发环境的5个步骤
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:微软即将发布Windows 10手机版,实际上很多人现在已经开始在开发Windows ...
- APP开发中的弹窗体系,UI设计师不能忽视的地方
1. 弹窗的定义 弹窗分为模态弹窗和非模态弹窗两种. 弹窗分类 模态弹窗:很容易打断用户的操作行为,用户必须回应,否则不能进行其他操作. 非模态弹窗:不会影响用户的操作,用户可以不对其进行回应,非模态 ...
- Windows Phone Studio-任何人都能开发Windows Phone App的在线工具
在一段时间的内测以后,微软于今天早些时候发布了其Windows Phone应用开发的在线工具,名字叫做Windows Phone Studio.其意义在于,通过简单的内容添加和样式选择,实现Windo ...
- Windows 8.1 store app 开发笔记
原文:Windows 8.1 store app 开发笔记 零.简介 一切都要从博彦之星比赛说起.今年比赛的主题是使用Bing API(主要提到的有Bing Map API.Bing Translat ...
- 【万里征程——Windows App开发】控件大集合2
以下再来看看一些前面还没有讲过的控件,只是控件太多以至于无法所有列出来,大家仅仅好举一反三啦. Button 前面最经常使用的控件就是Button啦,Button另一个有意思的属性呢.当把鼠标指针放在 ...
- Windows App开发之文件与数据
读取文件和目录名 这一节開始我们将陆续看到Windows App是如何操作文件的. 在Windows上读取文件名称.目录名 首先我们在XAML中定义一个Button和TextBlock,将读取文件/目 ...
- 20个可以帮你简化iOS app开发流程的工具
这里推荐20个可以帮你简化iOS app开发流程的工具.很多开发者都使用过这些工具,涉及原型和设计.编程.测试以及最后的营销,基本上涵盖了整个开发过程. 原型和设计 有了一个很好的创意后,你要做的不是 ...
- iOS开发之工具篇-20个可以帮你简化移动app开发流程的工具
如果想进入移动app开发这个领域,你总能从别的开发者或者网上或者书上找到各种各样的方法和工具,对于新手来说,还没有摸清门路就已经陷入迷茫了.这里推荐20个可以帮你简化app开发流程的工具.很多开发者都 ...
随机推荐
- JVM查找类文件的顺序(转)
配置classpath 根据path环境变量的原理,可以定义一个名为classpath环境变量,将要运行的class文件所在目录定义在该变量中. 例:set classpath=c:\ classpa ...
- Codechef Not a Triangle题解
找出一个数组中的三个数,三个数不能组成三角形. 三个数不能组成三角形的条件是:a + b < c 两边和小于第三边. 这个问题属于三个数的组合问题了.暴力法可解,可是时间效率就是O(n*n*n) ...
- hdu 3488 Tour
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3488 题意:给你一个N个顶点M条边的带权有向图,要你把该图分成1个或多个不相交的有向环.且所有定点都只 ...
- ThinkPHP页面跳转、Ajax技巧详细介绍(十八)
原文:ThinkPHP页面跳转.Ajax技巧详细介绍(十八) ThinkPHP页面跳转.Ajax技巧详细介绍 一.页面跳转 $this->success('查询成功',U('User/test' ...
- OCA读书笔记(12) - 数据库维护
查询优化器统计信息 搜集统计信息: 不是实时的: SQL> conn /as sysdbaConnected.SQL> grant select on dba_objects to sco ...
- Android相关
wifi密码:因为我们安卓系统的手机无线账号数据是储存在一个文件里的,那就是 /data/misc/wifi/wpa_supplicant.conf ,这个是系统文件,权限不够高是无法访问的,而这个文 ...
- 真实世界里的钢铁侠-特斯拉汽车创始人埃隆·马斯克(Elon Musk)
真实世界里的钢铁侠--特斯拉汽车公司和SpaceX公司总裁马斯克(31岁).当我们得意于「站在山上踢几块石头下去」或是「站在风口上的猪」的成功理论的时候,我们真的成功了吗?我们到底创造了什么?改变了什 ...
- Android----------WindowManager
我们Android平台是一个又一个的Activity组成的,每个Activity有一个或者多个View构成.所以说.当我们想显示一个界面的时候,我们首先想到的是建立一个Activity,然后全部的操作 ...
- 修改emlog后台登录路径的方法(转)
emlog后台登录地址的目录名称默认为admin,并且官方没有提供自定义后台登录入口名字的功能,这多少让我们觉得有些不安全,毕竟暴露一个网站的后台不是一件安全的事,今天就给您说下修改方法,增加一下网站 ...
- LeetCode总结 -- 树的性质篇
树的性质推断是树的数据结构比較主要的操作,一般考到都属于非常easy的题目,也就是第一道入门题.面试中最好不能有问题,力求一遍写对.不要给面试官不论什么挑刺机会.LeetCode中关于树的性质有下面题 ...