Windows Phone 8 锁屏背景与通知

本文详细介绍了 Windows Phone 8 的锁屏背景替换与应用通知提醒功能,包括如何设置自定义锁屏背景、锁屏通知的实现步骤及关键代码示例,旨在为开发者提供实用指南。


Windows Phone 8 在锁屏背景图片是支持应用自定义的,并且在屏幕下方还支持应用通知提醒,这是一个十分吸引眼球的新功能 虽说目前已经看到很多应用已经做个了个特性今天我还是在这个里为大家相信说明一下 为后面想做这个功能的同学先铺铺路。

此文是 升级到WP8必需知道的13个特性 系列的一个更新 希望这个系列可以给 Windows Phone 8开发者带来一些开发上的便利。

同时欢迎大家在这里和我沟通交流或者在新浪微博上 @王博_Nick

1. 锁屏背景

正如我说windows phone 8 是支持锁屏背景的替换的 下图是摘自MSDN的一张原图很好理解

代码写起来十分的简单

首先还是在WMAppManifest文件中声明下 这段XML要紧跟在<Tokens>节点后面

<Extensions>
      <Extension ExtensionName="LockScreen_Background" ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default" />
</Extensions>

 

修改锁屏背景代码

这里我解释一下 "ms-appx:///" 和 "ms-appdata:///Local/"

ms-appdata points to the root of the local app data folder.也就是说当你的图片文件是在文件系统中的时候使用ms-appdata前缀,时常从网络下载的图片保存在隔离存储器中就要使用这个前缀了。

ms-appx points to the Local app install folder, to reference resources bundled in the XAP package. 当此张图片是和当前应用一起打包在XAP包中的时候使用ms-appx前缀。

复制代码
private async void LockHelper(string filePathOfTheImage, bool isAppResource)
{
    try
    {
        var isProvider = Windows.Phone.System.UserProfile.LockScreenManager.IsProvidedByCurrentApplication;
        if (!isProvider)
        {
            // If you're not the provider, this call will prompt the user for permission.
            // Calling RequestAccessAsync from a background agent is not allowed.
            var op = await Windows.Phone.System.UserProfile.LockScreenManager.RequestAccessAsync();

            // Only do further work if the access was granted.
            isProvider = op == Windows.Phone.System.UserProfile.LockScreenRequestResult.Granted;
        }

        if (isProvider)
        {
            // At this stage, the app is the active lock screen background provider.

            // The following code example shows the new URI schema.
            // ms-appdata points to the root of the local app data folder.
            // ms-appx points to the Local app install folder, to reference resources bundled in the XAP package.
            var schema = isAppResource ? "ms-appx:///" : "ms-appdata:///Local/";
            var uri = new Uri(schema + filePathOfTheImage, UriKind.Absolute);

            // Set the lock screen background image.
            Windows.Phone.System.UserProfile.LockScreen.SetImageUri(uri);

            // Get the URI of the lock screen background image.
            var currentImage = Windows.Phone.System.UserProfile.LockScreen.GetImageUri();
            System.Diagnostics.Debug.WriteLine("The new lock screen background image is set to {0}", currentImage.ToString());
        }
        else
        {
            MessageBox.Show("You said no, so I can't update your background.");
        }
    }
    catch (System.Exception ex)
    {
        System.Diagnostics.Debug.WriteLine(ex.ToString());
    }
}
复制代码

 

经过我的测试执行到这里 LockScreenManager.RequestAccessAsync() 会弹出一个用户提示 需要用户确认。

                // Setup lockscreen.
                if (!LockScreenManager.IsProvidedByCurrentApplication)
                {
                    await LockScreenManager.RequestAccessAsync();
                }

 

当你在更新你的锁屏背景时 尤其是从独立存储空间中读取时 请尽量避免相同的文件名经我测试相同文件名有可能会造成系统默认缓存导致图片更新延迟的情况发生。

MSDN也提供了一个替换名称的方法

复制代码
string fileName;
var currentImage = LockScreen.GetImageUri();

if (currentImage.ToString().EndsWith("_A.jpg"))
{
    fileName = "LiveLockBackground_B.jpg";
}
else
{
    fileName = "LiveLockBackground_A.jpg";
}

var lockImage = string.Format("{0}", fileName);

// At this point in the code, write the image to isolated storage.
复制代码

 

当然在运行程序之前我们不能用代码干预设置锁屏背景在我们的程序中可以先预设一张图片作为锁屏背景 但是这张图片的命名必须是 DefaultLockScreen.jpg且将这张图片放置在项目根目录下.

同时在锁屏设置页面我们可以看到 open app的按钮可以直接导航到我们的应用中去 这里处理这个导航的方法和App to App 的方法类似 重载在App中处理InitializePhoneApplication方法 UriMapperBase即可 相信参考 windows phone 8 中的应用间通信

复制代码
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    string lockscreenKey = "WallpaperSettings";
    string lockscreenValue = "0";

    bool lockscreenValueExists = NavigationContext.QueryString.TryGetValue(lockscreenKey, out lockscreenValue);

    if (lockscreenValueExists)
    {
        // Navigate the user to your app's lock screen settings screen here, 
        // or indicate that the lock screen background image is updating.
    }
}
复制代码

 

当然在应用中也可以通过 LaunchUriAsync 方法打开设置页面 相信参考:http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj662937(v=vs.105).aspx

private async void btnGoToLockSettings_Click(object sender, RoutedEventArgs e)
{
    // Launch URI for the lock screen settings screen.
    var op = await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings-lock:"));
}

 

2. 锁屏通知

windows phone 7 中已经包含了推送通知,在windows phone 8中开发者可以将其融入到锁屏界面中来

下图还是一张选自MSDN的截图很清晰的说明通知的情况,左侧大字是显示的应用的详细状态,下面一行可以显示5个应用程序的通知数量。

同样在锁屏设置中可以选择设置显示通知的应用及显示即时状态的应用。

下面介绍下应用如何实现这个通知

首先第一步还是要在WMAppManifest中声明我们的应用是一个支持锁屏通知的应用同时指定通知的图标来源。

图标必须是一个白色背景透明 38 x 38 像素的PNG 图片

在Token节点中

<DeviceLockImageURI IsRelative="true" IsResource="false">Assets\LockImage.png</DeviceLockImageURI>

 

其次在声明支持通知 前者是声明支持显示应用显示即时状态 后者是声明显示应用显示详细状态。

<Extensions>
      <Extension ExtensionName="LockScreen_Notification_IconCount" ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default" />
      <Extension ExtensionName="LockScreen_Notification_TextField" ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default" />
</Extensions>

 

其实就这么简单 只要你的应用之前支持推送你 那么经过以上的设置推送信息就会显示在锁屏界面上了。

代码下载地址: https://pan.quark.cn/s/35e46f7e83fb 关于 Build Status Lines of code 这是一个参考 PotPlayer 的界面使用 Java 以及图形界面框架 JavaFX 使用 MCV 图形界面业务逻辑分离的开发模式, 所开发的个人视频播放器项目, 开发这个项目旨在于学习图形界面框架 JavaFX 实现了具有 PotPlayer相同 的简洁界面流畅的操作逻辑。 Note: PotPlayer 是 KMPlayer 的原制作者姜龙喜先生(韩国)进入 Daum 公司后的 新一代网络播放器, PotPlayer的优势在于强大的内置解码器以及支持各类的 视频格式, 而且是免费下载提供使用的。 目前版本: 2020/10/28 v1.0.0 [x] 支持打开文件自动播放 [x] 支持查看播放记录 [x] 支持幕边沿窗口自动吸附 [x] 支持双击视频来播放暂停 [x] 支持左键点击窗口任意位置来拖到窗口 [x] 支持左键双击播放窗口打开文件 [x] 支持根据视频尺寸自动调整窗口大小 [x] 支持根据播放文件类型调整窗口模式 [x] 支持根据视频尺寸自动调整窗口显示位置防止超出幕 [x] 支持记录上一次访问的文件路径 [x] 支持播放记录文件读写 已实现样式 未播放效果: 播放效果: 运行环境 本项目使用 NetBeans 配合 JDK 开发, NetBeans8.0 以及 JDK8.0 以上版本的均可以运行。 亦可使用其他集成开发环境, 例如 Eclipse, IntelliJ IDEA 配合使用 JDK8.0 以上版本均可构建此项目。 NetBeans download Eclipse downlo...
配电网前推后带法求电力系统潮流(Python&Matlab实现)内容概要:本文介绍了配电网前推后带法在电力系统潮流计算中的应用,并提供了PythonMatlab两种编程语言的实现方式。该方法主要用于求解配电网中的潮流分布,适用于辐射状或弱环网结构的配电系统。文中详细阐述了前推回代法的基本原理、算法流程及关键步骤,包括节点分层、前推过程(功率计算)后带过程(电压更新),并通过具体案例展示了代码实现过程仿真结果,验证了方法的有效性准确性。此外,文档还提及该资源属于一系列电力系统仿真研究的一部分,涵盖多种电力系统分析优化技术。; 适合人群:具备电力系统基础知识一定编程能力的高校学生、科研人员及从事电力系统分析仿真的工程技术人员;熟悉Python或Matlab语言者更佳。; 使用场景及目标:①用于教学科研中理解配电网潮流计算的基本原理实现方法;②为电力系统规划、运行分析提供算法支持;③作为开发更复杂配电自动化算法的基础工具;④帮助研究人员快速实现并验证前推回代法在不同网络结构下的性能表现。; 阅读建议:建议读者结合文中提供的代码实例,逐步调试运行,深入理解每一步的物理意义数学表达,同时可尝试将其扩展至含分布式电源的三相不平衡配电网等更复杂场景,提升实际应用能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值