原文:C# Windows Phone App 开发,修改【锁定画面】,从【Assets】、【UI】、【网路图片】,并解决失灵问题。

一般我们在开发Windows Phone App,有时会希望透过应用程式来改变锁定画面,但是锁定画面的设定有时会发生非常吊诡的现象,譬如锁定画面只会在第一次设定的时候成功,第二次之後全数失败,而且没有发生任何错误,这究竟是为什麽呢?!

?

本篇文章将引导您修改【锁定画面】,从【Assets】、【UI】、【网路图片】,并解决失灵问题。

?

制作修改锁定画面的APP必须要先修改【WMAppManifest.xml】

并接着【Tokens】的标签後贴上写下 :

?

  1. 1: <Extensions>
  1. 2: <Extension ExtensionName="LockScreen_Background" ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default" />
  1. 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. 1: private async void SetLockScreen()
  1. 2: {
  1. 3: //判断该APP是否已向系统申请修改锁定画面
  1. 4: var isProvider = Windows.Phone.System.UserProfile.LockScreenManager.IsProvidedByCurrentApplication;
  1. 5: //若尚未申请
  1. 6: if (!isProvider)
  1. 7: {
  1. 8: //跳出视窗询问使用者,是否授权该APP可以修改锁定画面
  1. 9: var op = await Windows.Phone.System.UserProfile.LockScreenManager.RequestAccessAsync();
  1. 10: isProvider = op == Windows.Phone.System.UserProfile.LockScreenRequestResult.Granted;
  1. 11: }
  1. 12: ?
  1. 13: //从Assets中的资源设定锁定画面
  1. 14: Uri url = new Uri("Assets/Tiles/FlipCycleTileLarge.png", UriKind.Relative);
  1. 15: BitmapImage bitmapImage = new BitmapImage();
  1. 16: bitmapImage.CreateOptions = BitmapCreateOptions.None;
  1. 17: bitmapImage.UriSource = url;
  1. 18: bitmapImage.ImageOpened += (s, e) =>
  1. 19: {
  1. 20: //下载完成
  1. 21: WriteableBitmap wbm = new WriteableBitmap((BitmapImage)s);
  1. 22: //将Bitmap转换成WriteableBitmap
  1. 23: Uri uri_Net = new Uri(WriteImageToFile(new WriteableBitmap(wbm)), UriKind.Absolute);
  1. 24: //设定锁定画面
  1. 25: Windows.Phone.System.UserProfile.LockScreen.SetImageUri(uri_Net);
  1. 26: };
  1. 27: ?
  1. 28: ?
  1. 29: //从网路图片设定锁定画面
  1. 30: Uri url_Net = new Uri("http://ppt.cc/vJH3", UriKind.Absolute);
  1. 31: BitmapImage bitmapImage_Net = new BitmapImage();
  1. 32: bitmapImage_Net.CreateOptions = BitmapCreateOptions.None;
  1. 33: bitmapImage_Net.UriSource = url;
  1. 34: bitmapImage_Net.ImageOpened += (s, e) =>
  1. 35: {
  1. 36: //下载完成
  1. 37: WriteableBitmap wbm = new WriteableBitmap((BitmapImage)s);
  1. 38: //将Bitmap转换成WriteableBitmap
  1. 39: Uri uri_Net = new Uri(WriteImageToFile(new WriteableBitmap(wbm)), UriKind.Absolute);
  1. 40: //设定锁定画面
  1. 41: Windows.Phone.System.UserProfile.LockScreen.SetImageUri(uri_Net);
  1. 42: };
  1. 43:
  1. 44: ?
  1. 45: ?
  1. 46: //从UI设定锁定画面
  1. 47: Uri uri_UI = new Uri(WriteImageToFile(new WriteableBitmap(LayoutRoot, null)), UriKind.Absolute);
  1. 48: Windows.Phone.System.UserProfile.LockScreen.SetImageUri(uri_UI);
  1. 49: }
  1. 50: ?
  1. 51:
  1. 52: ?
  1. 53: //档案写入Isolate 回传 Uri路径
  1. 54: private string WriteImageToFile(WriteableBitmap writeable_bitmap)
  1. 55: {
  1. 56: //档名A
  1. 57: string FileNameA = "A.jpg";
  1. 58: //档名B
  1. 59: string FileNameB = "B.jpg";
  1. 60: //最後使用的党名
  1. 61: string FileName = "";
  1. 62: try
  1. 63: {
  1. 64: ?
  1. 65: using (IsolatedStorageFile tStorage = IsolatedStorageFile.GetUserStoreForApplication())
  1. 66: {
  1. 67: //宣告存取IsolatedStorageFile的变数
  1. 68: var isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();
  1. 69: ?
  1. 70: //若为第一次A、B都不存在
  1. 71: if (!isolatedStorage.FileExists(FileNameA) && !isolatedStorage.FileExists(FileNameB))
  1. 72: {
  1. 73: //使用其中一个当作档名
  1. 74: FileName = FileNameA;
  1. 75: }
  1. 76: //若A存在则使用B名称来当作写入的档名
  1. 77: if (isolatedStorage.FileExists(FileNameA))
  1. 78: {
  1. 79: //删除A
  1. 80: isolatedStorage.DeleteFile(FileNameA);
  1. 81: //使用档名B
  1. 82: FileName = FileNameB;
  1. 83: }
  1. 84: //若B存在则使用A名称来当作写入的档名
  1. 85: if (isolatedStorage.FileExists(FileNameB))
  1. 86: {
  1. 87: //删除B
  1. 88: isolatedStorage.DeleteFile(FileNameB);
  1. 89: //使用档名A
  1. 90: FileName = FileNameA;
  1. 91: }
  1. 92:
  1. 93: Debug.WriteLine(FileName);
  1. 94: //在独立存储区创建档案
  1. 95: IsolatedStorageFileStream fileStream = isolatedStorage.CreateFile(FileName);
  1. 96: //写入JPG图档,品质为100 (越低图片画质就越低)
  1. 97: writeable_bitmap.SaveJpeg(fileStream, writeable_bitmap.PixelWidth, writeable_bitmap.PixelHeight, 0, 100);
  1. 98: //关闭IO
  1. 99: fileStream.Close();
  1. 100: fileStream.Dispose();
  1. 101: tStorage.Dispose();
  1. 102: ?
  1. 103: }
  1. 104: //重组新的URI,并回传
  1. 105: return string.Format("ms-appdata:///local/{0}", FileName);
  1. 106: }
  1. 107: catch (Exception ex)
  1. 108: {
  1. 109: string tMsg = ex.Message;
  1. 110: return string.Empty;
  1. 111: }
  1. 112: }

?

如此一来修改锁定画面就是一件简单的事情了!

?

References :

Windows Phone 8 锁屏背景与通知

WP8 LockScreen IsolatedStorageFile 锁定屏幕 不会改变 C#

?

文章中的叙述如有观念不正确错误的部分,欢迎告知指正 谢谢

转载请注明出处,并且附上本篇文章网址 !? 感谢。

SUKI

HOLIESTAR

DotBlogs Tags:

C#

Change LockScreen

Demo

how to change LockScreen

LockScreen

Sample

示范教学

修改

无效

范例程式

锁定画面

锁屏画面

关连文章

[笔记]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】、【网路图片】,并解决失灵问题。的更多相关文章

  1. C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面。

    原文:C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从[网路图片].[Assets资源].[UI]修改锁定画面. 一般我们在开发Windows ...

  2. 打造理想的Windows 10 APP开发环境的5个步骤

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:微软即将发布Windows 10手机版,实际上很多人现在已经开始在开发Windows ...

  3. APP开发中的弹窗体系,UI设计师不能忽视的地方

    1. 弹窗的定义 弹窗分为模态弹窗和非模态弹窗两种. 弹窗分类 模态弹窗:很容易打断用户的操作行为,用户必须回应,否则不能进行其他操作. 非模态弹窗:不会影响用户的操作,用户可以不对其进行回应,非模态 ...

  4. Windows Phone Studio-任何人都能开发Windows Phone App的在线工具

    在一段时间的内测以后,微软于今天早些时候发布了其Windows Phone应用开发的在线工具,名字叫做Windows Phone Studio.其意义在于,通过简单的内容添加和样式选择,实现Windo ...

  5. Windows 8.1 store app 开发笔记

    原文:Windows 8.1 store app 开发笔记 零.简介 一切都要从博彦之星比赛说起.今年比赛的主题是使用Bing API(主要提到的有Bing Map API.Bing Translat ...

  6. 【万里征程——Windows App开发】控件大集合2

    以下再来看看一些前面还没有讲过的控件,只是控件太多以至于无法所有列出来,大家仅仅好举一反三啦. Button 前面最经常使用的控件就是Button啦,Button另一个有意思的属性呢.当把鼠标指针放在 ...

  7. Windows App开发之文件与数据

    读取文件和目录名 这一节開始我们将陆续看到Windows App是如何操作文件的. 在Windows上读取文件名称.目录名 首先我们在XAML中定义一个Button和TextBlock,将读取文件/目 ...

  8. 20个可以帮你简化iOS app开发流程的工具

    这里推荐20个可以帮你简化iOS app开发流程的工具.很多开发者都使用过这些工具,涉及原型和设计.编程.测试以及最后的营销,基本上涵盖了整个开发过程. 原型和设计 有了一个很好的创意后,你要做的不是 ...

  9. iOS开发之工具篇-20个可以帮你简化移动app开发流程的工具

    如果想进入移动app开发这个领域,你总能从别的开发者或者网上或者书上找到各种各样的方法和工具,对于新手来说,还没有摸清门路就已经陷入迷茫了.这里推荐20个可以帮你简化app开发流程的工具.很多开发者都 ...

随机推荐

  1. Delphi中复制带有String的记录结构时不能使用Move之类的内存操作函数

    请看下面的代码: program TestRecord; {$APPTYPE CONSOLE} uses  SysUtils,  Math; type  TRecordA = record    Na ...

  2. How to get the source code of the chromium of the specified revision

    I'd like to get the source code of the chromium 34.0.1847.9. gclient config http://src.chromium.org/ ...

  3. apk应用的反编译和源代码的生成

    对于反编译一直持有无所谓有或无的态度.经过昨天一下午的尝试,也有了点心得和体会: 先给大家看看编译的过程和我们反编译的过程概图吧: 例如以下是反编译工具的根文件夹结构: 三个目录也实际上是下面三个步骤 ...

  4. SQL查询语句联系

    建立四个表,分别是学生表,课程表,成绩表和教师信息表 插入信息: 题目: 1. 查询Student表中的所有记录的Sname.Ssex和Class列 select Sname,Ssex,Class f ...

  5. VC生成的DLL给QT的EXE调用时lib路径问题小结

    VC生成的DLL给QT调用,有两种方式,一种是隐式调用调用(使用.lib文件方式): ① 在*.pro工程文件中添加VC生成的lib文件路径时,或者使用一个绝对路径,如: LIBS += " ...

  6. 14.3.5.1 An InnoDB Deadlock Example

    14.3.5 Deadlocks in InnoDB 14.3.5.1 An InnoDB Deadlock Example 14.3.5.2 Deadlock Detection and Rollb ...

  7. JAVA - 优雅的记录日志(log4j实战篇) (转)

    写在前面 项目开发中,记录错误日志有以下好处: 方便调试 便于发现系统运行过程中的错误 存储业务数据,便于后期分析 在java中,记录日志有很多种方式: 自己实现 自己写类,将日志数据,以io操作方式 ...

  8. 搭建php环境时解决jpeg6 make: ./libtool:命令未找到

    搭建php环境时解决jpeg6 make: ./libtool:命令未找到 [root@bogon jpeg-6b]# make; make install ./libtool --mode=comp ...

  9. 基于FP-Tree的关联规则FP-Growth推荐算法Java实现

    基于FP-Tree的关联规则FP-Growth推荐算法Java实现 package edu.test.ch8; import java.util.ArrayList; import java.util ...

  10. NOJ1184 失落的邮票 哈希表

    意甲冠军 我们共收集N邮票.现在失去了2张,剩下N-2张-..原集邮收集了所有对.因此,找到什么两枚邮票是一个.它们输出. (确定缺少邮票是不一样的) 思路 由于编号比較大,能够用hash表压缩成数组 ...