设为首页 收藏本站
查看: 1034|回复: 0

重新想象 Windows 8 Store Apps (70)

[复制链接]

尚未签到

发表于 2015-5-22 10:04:22 | 显示全部楼层 |阅读模式
  [源码下载]




重新想象 Windows 8 Store Apps (70) - 其它: 文件压缩和解压缩, 与 Windows 商店相关的操作, app 与 web, 几个 Core 的应用, 页面的生命周期和程序的生命周期  
作者:webabcd

介绍
重新想象 Windows 8 Store Apps 之 其它


  • 文件压缩和解压缩
  • 与 Windows 商店相关的操作
  • app 与 web
  • 几个 Core 的应用
  • 页面的生命周期和程序的生命周期
  
示例
1、演示如何压缩和解压缩文件
Feature/Compression.xaml














  Feature/Compression.xaml.cs



/*
* 演示如何压缩和解压缩文件
*
* 注:对于非常小的数据压缩后可能比压缩前还要大,已经经过压缩算法的文件如 jpg mp3 mp4 等再压缩效果不明显也可能比之前还大
*/
using System;
using Windows.Storage;
using Windows.Storage.Compression;
using Windows.Storage.Pickers;
using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using XamlDemo.Common;
namespace XamlDemo.Feature
{
public sealed partial class Compression : Page
{
public Compression()
{
this.InitializeComponent();
}
private void btnXpress_Click(object sender, RoutedEventArgs e)
{
// XPRESS 算法
            CompressionDemo(CompressAlgorithm.Xpress);
}
private void btnXpressHuff_Click(object sender, RoutedEventArgs e)
{
// 具有霍夫曼编码的 XPRESS 算法
            CompressionDemo(CompressAlgorithm.XpressHuff);
}
private void btnMszip_Click(object sender, RoutedEventArgs e)
{
// Mszip 算法
            CompressionDemo(CompressAlgorithm.Mszip);
}
private void btnLzms_Click(object sender, RoutedEventArgs e)
{
// Lzms 算法
            CompressionDemo(CompressAlgorithm.Lzms);
}
private async void CompressionDemo(CompressAlgorithm algorithm)
{
try
{
if (!Helper.EnsureUnsnapped())
return;
// 选择一个准备压缩的文件
var picker = new FileOpenPicker();
picker.FileTypeFilter.Add("*");
var originalFile = await picker.PickSingleFileAsync();
if (originalFile == null)
return;
lblMsg.Text = "选中了文件:" + originalFile.Name;
lblMsg.Text += Environment.NewLine;

var compressedFilename = originalFile.Name + ".compressed"; // 注意:为了有读写 .compressed 文件的权限,需要在 Package.appxmanifest 中新增一个“文件类型关联”声明,并做相关配置
var compressedFile = await KnownFolders.DocumentsLibrary.CreateFileAsync(compressedFilename, CreationCollisionOption.GenerateUniqueName);
lblMsg.Text += "创建了一个新文件,用于保存压缩后的文件:" + compressedFile.Name;
lblMsg.Text += Environment.NewLine;
using (var originalInput = await originalFile.OpenReadAsync()) // 打开原始文件
using (var compressedOutput = await compressedFile.OpenAsync(FileAccessMode.ReadWrite)) // 打开压缩后的数据的目标文件(目前是一个空文件)
using (var compressor = new Compressor(compressedOutput.GetOutputStreamAt(0), algorithm, 0)) // 实例化 Compressor
                {
var bytesCompressed = await RandomAccessStream.CopyAsync(originalInput, compressor); // 将原始数据写入到压缩后的数据的目标文件
lblMsg.Text += "已将原始文件的数据写入到:" + compressedFile.Name;
lblMsg.Text += Environment.NewLine;
var finished = await compressor.FinishAsync(); // 压缩指定文件中的数据
lblMsg.Text += "此文件中的数据已被压缩:" + compressedFile.Name;
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "压缩前大小:" + bytesCompressed.ToString() + " - 压缩后大小:" + compressedOutput.Size.ToString();
lblMsg.Text += Environment.NewLine;
}

var decompressedFilename = originalFile.Name + ".decompressed"; // 注意:为了有读写 .decompressed 文件的权限,需要在 Package.appxmanifest 中新增一个“文件类型关联”声明,并做相关配置
var decompressedFile = await KnownFolders.DocumentsLibrary.CreateFileAsync(decompressedFilename, CreationCollisionOption.GenerateUniqueName);
lblMsg.Text += "创建了一个新文件,用于保存解压缩后的文件:" + decompressedFile.Name;
lblMsg.Text += Environment.NewLine;
using (var compressedInput = await compressedFile.OpenSequentialReadAsync()) // 打开经过压缩的文件
using (var decompressedOutput = await decompressedFile.OpenAsync(FileAccessMode.ReadWrite)) // 打开解压缩后的数据的目标文件(目前是一个空文件)
using (var decompressor = new Decompressor(compressedInput)) // 实例化 Compressor
                {
var bytesDecompressed = await RandomAccessStream.CopyAsync(decompressor, decompressedOutput); // 解压缩数据,并将解压缩后的数据保存到目标文件
lblMsg.Text += "文件解压缩完成:" + decompressedFile.Name;
lblMsg.Text += Environment.NewLine;
lblMsg.Text += "解压缩后的大小:" + bytesDecompressed.ToString();
lblMsg.Text += Environment.NewLine;
}
}
catch (Exception ex)
{
lblMsg.Text = ex.ToString();
}
}
}
}
  
2、演示与 Windows 商店相关的操作
Feature/StoreDemo.xaml















  Feature/StoreDemo.xaml.cs



/*
* 演示与 Windows 商店相关的操作
*
* 注:
* 测试时可以使用 CurrentAppSimulator 来模拟购买行为,msdn 上有对应的 sample 可以下载
*/
using System;
using Windows.ApplicationModel.Store;
using Windows.System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
namespace XamlDemo.Feature
{
public sealed partial class StoreDemo : Page
{
public StoreDemo()
{
this.InitializeComponent();
}
private async void btnOpenAppInStore_Click(object sender, RoutedEventArgs e)
{
// 跳转到 Windows 商店中指定 app 的主页(PDP - program display page; PFN - package family name)
await Launcher.LaunchUriAsync(new Uri(@"ms-windows-store:PDP?PFN=10437webabcd.173815756DD78_s2b9shdpk31kj"));
}
private async void btnReviewAppInStore_Click(object sender, RoutedEventArgs e)
{
// 在 Windows 商店中评论指定的 app(PFN - package family name)
await Launcher.LaunchUriAsync(new Uri(@"ms-windows-store:REVIEW?PFN=10437webabcd.173815756DD78_s2b9shdpk31kj"));
}
private async void btnSearchAppInStore_Click(object sender, RoutedEventArgs e)
{
// 在 Windows 商店中通过关键字搜索 app
await Launcher.LaunchUriAsync(new Uri(@"ms-windows-store:Search?query=贪吃蛇"));
}
private async void btnUpdateAppInStore_Click(object sender, RoutedEventArgs e)
{
// 跳转到 Windows 商店中的 app 更新页
await Launcher.LaunchUriAsync(new Uri(@"ms-windows-store:Updates"));
}

protected override void OnNavigatedTo(NavigationEventArgs e)
{
CurrentAppDemo();
LicenseInformationDemo();
}
private void CurrentAppDemo()
{
// 由 Windows 商店创建的此 app 的 id
// CurrentApp.AppId;
// 获取此 app 在 Windows 商店中的 URI 地址
// CurrentApp.LinkUri;
// 获取当前 app 的 LicenseInformation 对象
// CurrentApp.LicenseInformation;
// 请求应用程序内购买完整许可证
// CurrentApp.RequestAppPurchaseAsync();
// 请求应用程序内购买指定产品的许可证
// CurrentApp.RequestProductPurchaseAsync
// 获取此 app 的全部购买记录
// CurrentApp.GetAppReceiptAsync();
// 获取此 app 的指定产品的购买记录
// CurrentApp.GetProductReceiptAsync();
// 获取此 app 的 ListingInformation 信息
// CurrentApp.LoadListingInformationAsync();

// ListingInformation - 此 app 在 Windows 商店中的相关信息
//     AgeRating - app 的年龄分级            
//     CurrentMarket - app 的当前商店,如:en-us
//     Name - app 在当前商店中的名称
//     FormattedPrice - app 在当前商店中的价格
//     Description - app 在当前商店中的程序说明
//     ProductListings - app 在当前商店中的 ProductListing 集合

// ProductListing - app 的产品信息
//     ProductId - 产品 ID
//     Name - 产品名称
//     FormattedPrice - 产品当前市场的格式化后的价格
        }
private void LicenseInformationDemo()
{
// 当前 app 的许可证信息
LicenseInformation licenseInformation = CurrentApp.LicenseInformation;
// 许可证ok则为true,否则无许可证或许可证过期则为false
// licenseInformation.IsActive;  
// 是否是试用许可证
// licenseInformation.IsTrial;
// 许可证的到期时间
// licenseInformation.ExpirationDate;
// 许可证状态发生变化时所触发的事件
// licenseInformation.LicenseChanged;
// 获取此 app 相关的 ProductLicenses 集合
// licenseInformation.ProductLicenses;

// ProductLicense - 产品许可证
//     ProductId - 产品 ID
//     IsActive - 此产品许可证ok则为true,否则无此产品许可证或此产品许可证过期则为false
//     ExpirationDate - 此产品许可证的到期时间
        }
}
}
  
3、演示与 Windows 商店相关的操作
WebServer/AppAndWeb.html














app and web


metro ie 打开,可以通过右下角的按钮“获取此网站的应用”或“切换到 xxx 应用”


  
4、演示几个 Core 的应用
Feature/CoreDemo.xaml.cs



/*
* 演示几个 Core 的应用
*/
using System;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
namespace XamlDemo.Feature
{
public sealed partial class CoreDemo : Page
{
public CoreDemo()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
CoreDispatcherDemo();
CoreWindowDemo();
CoreApplicationDemo();
}
private async void CoreDispatcherDemo()
{
// CoreDispatcher - 消息调度器
Windows.UI.Core.CoreDispatcher coreDispatcher = Windows.UI.Xaml.Window.Current.Dispatcher;
await coreDispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, () =>
{
// 调用 coreDispatcher 所在的线程
            });
coreDispatcher.AcceleratorKeyActivated += (Windows.UI.Core.CoreDispatcher sender, Windows.UI.Core.AcceleratorKeyEventArgs args) =>
{
// 当快捷键被激活(按住)时所触发的事件
            };
}
private void CoreWindowDemo()
{
// CoreWindow - 窗口对象,可以监测用户的输入
Windows.UI.Core.CoreWindow coreWindow = Windows.UI.Xaml.Window.Current.CoreWindow;
// coreWindow.KeyDown - 按键按下时触发的事件
// coreWindow.PointerPressed - 指针按下时触发的事件
// coreWindow.GetAsyncKeyState(VirtualKey virtualKey) - 异步返回虚拟键的状态
// coreWindow.GetKeyState(VirtualKey virtualKey) - 返回虚拟键的状态
// coreWindow.Activate(), coreWindow.Close() - 激活窗口, 关闭窗口
// coreWindow.Activated, coreWindow.Closed - 窗口被激活时触发的事件,窗口被关闭时触发的事件
// coreWindow.Dispatcher - 窗口的消息调度器
// coreWindow.Bounds - 窗口的边框
        }
private void CoreApplicationDemo()
{
// Windows.ApplicationModel.Core.CoreApplication.Id - 获取 Package.appxmanifest 中  所配置的值
// Windows.ApplicationModel.Core.CoreApplication.Exiting - 关闭应用程序时触发的事件
// Windows.ApplicationModel.Core.CoreApplication.Resuming - 继续应用程序时触发的事件
// Windows.ApplicationModel.Core.CoreApplication.Suspending - 挂起应用程序时触发的事件
// Windows.ApplicationModel.Core.CoreApplication.Properties - 一个字典表,用于在应用程序运行时保存和获取全局信息
        }
}
}
  
5、简述页面的生命周期和程序的生命周期
Feature/LifeCycle.xaml.cs



/*
* 页面生命周期:
* 1、导航相关的就是:OnNavigatedTo(), OnNavigatingFrom(), OnNavigatedFrom()
* 2、关于导航的更多内容参见:Controls/Frame/Demo.xaml
* 3、有一点需要注意:Popup 中的内容每次显示时都会触发 Loaded 事件
*
*
* 程序生命周期(参见:App.xaml.cs):
* 1、OnSuspending() 时保存状态
* 2、OnLaunched() 时恢复状态
* 3、Suspending - 转为挂起状态时触发的事件
* 4、Resuming - 由挂起状态转为运行状态时触发的事件
*/
using Windows.UI.Xaml.Controls;
namespace XamlDemo.Feature
{
public sealed partial class LifeCycle : Page
{
public LifeCycle()
{
this.InitializeComponent();
}
}
}
  
OK
[源码下载]

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-69445-1-1.html 上篇帖子: Windows 8 的 Metro 程序 下篇帖子: 重新想象 Windows 8 Store Apps (30)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表