程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Windows 8 Store Apps學習(59) 鎖屏

Windows 8 Store Apps學習(59) 鎖屏

編輯:關於.NET

介紹

重新想象 Windows 8 Store Apps 之 鎖屏

登錄鎖屏,獲取當前程序的鎖屏權限,從鎖屏中移除

發送徽章或文本到鎖屏

將一個 app 的多個 tile 綁定到鎖屏

自定義鎖屏圖片

示例

1、演示如何登錄鎖屏,獲取當前程序的鎖屏權限,從鎖屏中移除

LockScreen/AccessLockScreen.xaml

<Page
    x:Class="XamlDemo.LockScreen.AccessLockScreen"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.LockScreen"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    
    <Grid Background="Transparent">
        <StackPanel Margin="120 0 0 0">
                
            <TextBlock Name="lblMsg" FontSize="14.667" />
    
            <Button Name="btnRequestAccess" Content="請求登錄鎖屏" Margin="0 10 0 0" Click="btnRequestAccess_Click" />
    
            <Button Name="btnGetAccessStatus" Content="獲取當前程序的鎖屏權限" Margin="0 10 0 0" Click="btnGetAccessStatus_Click" />
    
            <Button Name="btnRemoveAccess" Content="從鎖屏中移除" Margin="0 10 0 0" Click="btnRemoveAccess_Click" />
    
        </StackPanel>
    </Grid>
</Page>

LockScreen/AccessLockScreen.xaml.cs

/*
 * 演示如何登錄鎖屏,獲取當前程序的鎖屏權限,從鎖屏中移除
 * 
 * 注:
 * 要想請求鎖屏權限,需要後台任務支持“推送通知”或“控制通道”
 */
    
using System;
using Windows.ApplicationModel.Background;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
    
namespace XamlDemo.LockScreen
{
    public sealed partial class AccessLockScreen : Page
    {
        public AccessLockScreen()
        {
            this.InitializeComponent();
        }
    
        private async void btnRequestAccess_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // 向系統請求登錄鎖屏,會彈出確認對話框
                //     需要後台任務支持“推送通知”或“控制通道”,否則會拋出異常
                //     不能在模擬器中運行
                //     如果 BackgroundAccessStatus 不等於 Unspecified,則即使調用 RequestAccessAsync() 也不會出現對話框,需要用戶去“設置”中去添加或移除鎖屏應用
                BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync();
    
                /*
                 * BackgroundAccessStatus - 當前 app 的鎖屏權限
                 *     Unspecified - 用戶尚未選擇
                 *     Denied - 被用戶拒絕
                 *     AllowedWithAlwaysOnRealTimeConnectivity - 用於允許了,且支持實時連接,即使電量低
                 *     AllowedMayUseActiveRealTimeConnectivity - 用於允許了,且支持實時連接,但是如果電量低則無法實時連接
                 */
    
                lblMsg.Text = "RequestAccessAsync(): " + status.ToString();
            }
            catch (Exception ex)
            {
                lblMsg.Text = ex.ToString();
            }
        }
    
        private void btnGetAccessStatus_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // 獲取當前應用程序的鎖屏權限
                BackgroundAccessStatus status = BackgroundExecutionManager.GetAccessStatus();
                lblMsg.Text = "GetAccessStatus(): " + status.ToString();
            }
            catch (Exception ex)
            {
                lblMsg.Text = ex.ToString();
            }
        }
    
        private void btnRemoveAccess_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // 將當前應用程序從鎖屏中移除
                BackgroundExecutionManager.RemoveAccess();
                lblMsg.Text = "RemoveAccess()";
            }
            catch (Exception ex)
            {
                lblMsg.Text = ex.ToString();
            }
        }
    }
}

2、演示如何發送徽章或文本到鎖屏

LockScreen/SendNotification.xaml

<Page
    x:Class="XamlDemo.LockScreen.SendNotification"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.LockScreen"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    
    <Grid Background="Transparent">
        <StackPanel Margin="120 0 0 0">
    
            <Button Name="btnSendBadge" Content="send badage to lock screen" Click="btnSendBadge_Click" />
    
            <Button Name="btnSendTile" Content="send tile text to lock screen" Margin="0 10 0 0" Click="btnSendTile_Click" />
    
        </StackPanel>
    </Grid>
</Page>

LockScreen/SendNotification.xaml.cs

/*
 * 演示如何發送徽章或文本到鎖屏
 * 
 * 注:
 * 如果需要發送文本到鎖屏,需要手動在“設置”中將 app 添加到“選擇要顯示詳細狀態

的應用”中
 * 
 * 另:
 * 關於 tile 和 badge 請參見:XamlDemo/Tile
 */
    
using NotificationsExtensions.BadgeContent;
using NotificationsExtensions.TileContent;
using Windows.UI.Notifications;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
    
namespace XamlDemo.LockScreen
{
    public sealed partial class SendNotification : Page
    {
        public SendNotification()
        {
            this.InitializeComponent();
        }
    
        private void btnSendBadge_Click(object sender, RoutedEventArgs e)
        {
            // 發送 badge 到鎖屏
            BadgeNumericNotificationContent badgeContent = new BadgeNumericNotificationContent(3);
            BadgeNotification badge = badgeContent.CreateNotification();
            BadgeUpdater badgeUpdater = BadgeUpdateManager.CreateBadgeUpdaterForApplication();
            badgeUpdater.Update(badge);
        }
    
        private void btnSendTile_Click(object sender, RoutedEventArgs e)
        {
            // 發送文本到鎖屏,前提是此 app 在“選擇要顯示詳細狀態的應用”中
            ITileWideSmallImageAndText03 tileContent = TileContentFactory.CreateTileWideSmallImageAndText03();
            tileContent.TextBodyWrap.Text = "hello webabcd";
            tileContent.Image.Src = "ms-appx:///Assets/Logo.png";
            tileContent.RequireSquareContent = false;
            TileUpdateManager.CreateTileUpdaterForApplication().Update(tileContent.CreateNotification());
        }
    }
}

3、演示如何將一個 app 的多個 tile 綁定到鎖屏

LockScreen/MultipleTiles.xaml

<Page
    x:Class="XamlDemo.LockScreen.MultipleTiles"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.LockScreen"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    
    <Grid Background="Transparent">
        <StackPanel Margin="120 0 0 0">
    
            <Button Name="btnOnlyBadge" Content="只能發送 badge 的可以綁定到鎖屏的 SecondaryTile" Click="btnOnlyBadge_Click" />
    
            <Button Name="btnBadgeAndText" Content="既能發送 badge 又能發送 text 的可以綁定到鎖屏的 SecondaryTile" Margin="0 10 0 0" 

Click="btnBadgeAndText_Click" />
    
        </StackPanel>
    </Grid>
</Page>

LockScreen/MultipleTiles.xaml.cs

/*
 * 演示如何將一個 app 的多個 tile 綁定到鎖屏
 * 
 * 要想將 SecondaryTile 綁定到鎖屏,需要注意:
 * 1、需要設置 SecondaryTile 的 LockScreenBadgeLogo
 * 2、如果需要文本支持則還需要設置 SecondaryTile 的 

LockScreenDisplayBadgeAndTileText 為 true
 * 3、需要手動在“設置”中將 SecondaryTile 添加到鎖屏,當然如果需要文本支持則需要

手動將 app 添加到“選擇要顯示詳細狀態的應用”中
 */
    
using NotificationsExtensions.BadgeContent;
using NotificationsExtensions.TileContent;
using System;
using Windows.UI.Notifications;
using Windows.UI.Popups;
using Windows.UI.StartScreen;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using XamlDemo.Common;
    
namespace XamlDemo.LockScreen
{
    public sealed partial class MultipleTiles : Page
    {
        private string _tile1Id = "123";
        private string _tile2Id = "456";
    
        public MultipleTiles()
        {
            this.InitializeComponent();
        }
    
        // 僅支持 badge 的可以登錄鎖屏的 SecondaryTile
        private async void btnOnlyBadge_Click(object sender, RoutedEventArgs e)
        {
            SecondaryTile secondTile = new SecondaryTile(
                _tile1Id,
                "testOnlyBadge",
                "testOnlyBadge",
                "argument1",
                TileOptions.ShowNameOnLogo,
                new Uri("ms-appx:///Assets/Logo.png")
            );
    
            // 需要指定 LockScreenBadgeLogo
            secondTile.LockScreenBadgeLogo = new Uri("ms-appx:///Assets/BadgeLogo.png");
    
            bool isPinned = await secondTile.RequestCreateForSelectionAsync(Helper.GetElementRect((FrameworkElement)sender), Placement.Above);
            if (isPinned)
            {
                BadgeNumericNotificationContent badgeContent = new BadgeNumericNotificationContent(2);
                BadgeUpdateManager.CreateBadgeUpdaterForSecondaryTile(_tile1Id).Update(badgeContent.CreateNotification());
            }
        }
    
        // 即支持徽章又支持文本的可以登錄鎖屏的 SecondaryTile
        private async void btnBadgeAndText_Click(object sender, RoutedEventArgs e)
        {
            SecondaryTile secondTile = new SecondaryTile(
                _tile2Id,
                "testBadgeAndText",
                "testBadgeAndText",
                "argument2",
                TileOptions.ShowNameOnLogo | TileOptions.ShowNameOnWideLogo,
                new Uri("ms-appx:///Assets/Logo.png"),
                new Uri("ms-appx:///Assets/WideLogo.png")
            );
    
            // 需要指定 LockScreenBadgeLogo
            secondTile.LockScreenBadgeLogo = new Uri("ms-appx:///Assets/BadgeLogo.png");
            // 需要設置 LockScreenDisplayBadgeAndTileText 為 true
            secondTile.LockScreenDisplayBadgeAndTileText = true;
    
            bool isPinned = await secondTile.RequestCreateForSelectionAsync(Helper.GetElementRect((FrameworkElement)sender), Placement.Above);
            if (isPinned)
            {
                ITileWideText03 tileContent = TileContentFactory.CreateTileWideText03();
                tileContent.TextHeadingWrap.Text = "hello webabcd";
                tileContent.RequireSquareContent = false;
                TileUpdateManager.CreateTileUpdaterForSecondaryTile(_tile2Id).Update(tileContent.CreateNotification());
            }
        }
    }
}

4、演示如何自定義鎖屏圖片

LockScreen/CustomLockScreenImage.xaml

<Page
    x:Class="XamlDemo.LockScreen.CustomLockScreenImage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.LockScreen"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    
    <Grid Background="Transparent">
        <StackPanel Margin="120 0 0 0">
    
            <Button Name="btnDemo" Content="自定義鎖屏圖片" Click="btnDemo_Click" />
                
            <Image Name="img" Width="200" Height="200" Margin="0 10 0 0" HorizontalAlignment="Left" />
                
        </StackPanel>
    </Grid>
</Page>

查看本欄目

LockScreen/CustomLockScreenImage.xaml.cs

/*
 * 演示如何自定義鎖屏圖片
 */
    
using System;
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media.Imaging;
using XamlDemo.Common;
    
namespace XamlDemo.LockScreen
{
    public sealed partial class CustomLockScreenImage : Page
    {
        public CustomLockScreenImage()
        {
            this.InitializeComponent();
        }
    
        private async void btnDemo_Click(object sender, RoutedEventArgs e)
        {
            if (Helper.EnsureUnsnapped())
            {
                FileOpenPicker imagePicker = new FileOpenPicker
                {
                    ViewMode = PickerViewMode.Thumbnail,
                    SuggestedStartLocation = PickerLocationId.PicturesLibrary,

                    FileTypeFilter = { ".jpg", ".jpeg", ".png", ".bmp" }
                };
    
                StorageFile imageFile = await imagePicker.PickSingleFileAsync();
                if (imageFile != null)
                {
                    // 將指定的圖片設置為鎖屏圖片
                    await Windows.System.UserProfile.LockScreen.SetImageFileAsync(imageFile);
    
                    // 獲取當前的鎖屏圖片
                    IRandomAccessStream imageStream = Windows.System.UserProfile.LockScreen.GetImageStream();
                    if (imageStream != null)
                    {
                        BitmapImage lockScreenImage = new BitmapImage();
                        lockScreenImage.SetSource(imageStream);
                        img.Source = lockScreenImage;
                    }
                }
            }
        }
    }
}

OK

[源碼下載]:http://files.cnblogs.com/webabcd/Windows8.rar

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved