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

Windows 8 应用商店应用开发 之 应用间文件访问

[复制链接]

尚未签到

发表于 2015-5-22 10:44:52 | 显示全部楼层 |阅读模式
应用间文件访问
在前面的内容中介绍了如何使用文件选取器访问本地文件,而文件选取器除了能够访问本地文件外,还可以在一个应用中访问另一个应用中的文件。下面将通过一个具体的实例,介绍如何使用文件选取器调用其他应用并获取其中的文件。
本实例包含两个应用程序,第一个应用在被第二个应用调用时激活,用于读取一张应用内部的图片。第二个应用通过文件选取器调用第一个应用,并获得第一个应用读取的图片。接下来创建第一个应用程序。
(1)创建提供文件的应用
启动Visual Studio 2012,新建一个Windows应用商店的空白应用程序项目,命名为FileProvider。由于本应用的功能是读取一张应用内部的图片,所以首先需要向项目中添加一个图片文件。在解决方案资源管理器中右键单击项目中的Assets文件夹,选择“添加”à“现有项”,在本地文件夹中选择并添加一个名为“蔬菜”的JPG图片文件。
完成图片的添加之后,接下来对应用进行设置以便能够在其他应用中使用文件选取器调用此应用,双击打开项目中的清单文件Package.appxmanifest,选择清单设计器窗口中的“声明”选项卡,在“可用声明”下拉列表中选择“文件打开选取器”,为应用添加一个文件打开选取器声明,接着在声明的“支持的文件类型”文本框中设置能够显示的文件类型。具体设置方法如图13-7所示:

DSC0000.jpg
图13-7 应用清单设计器界面

完成了清单文件的设置之后,双击打开项目中的MainPage.xaml文件,在文件的Grid元素中添加以下代码,用于应用前台界面的展示。


    点击下面的按钮,将在本地文件中选择一个图片
   

在上面的代码中,添加了一个文本块和一个“选择图片”按钮,文本块用于显示提示信息,“选择图片”按钮则用于读取图片。界面显示效果如图13-8所示。
DSC0001.jpg

图13-8 FileProvider应用前台界面

布局了前台界面之后,接着来看后台功能的实现。当应用被其他应用通过文件选取器激活时,会触发相应的事件,App.xaml.cs文件中的OnFileOpenPickerActivated方法是Windows应用商店应用处理此事件的默认方法,这里通过重写此方法在应用被文件选取器激活时进行相应处理。代码如下所示:

protected override void OnFileOpenPickerActivated(FileOpenPickerActivatedEventArgs args)
{
    var newPage = new MainPage();
    newPage.AppActivate(args);
}
在上面的代码中,创建了一个MainPage类型的对象newPage,然后以args为参数调用了MainPage类中的AppActivate方法,实现对激活事件的具体处理。
在介绍MainPage.xaml.cs中的AppActivate方法之前,为了能够实现被其他应用激活,这里先在MainPage类中定义一个FileOpenPickerUI类型的成员变量,代码如下所示:

FileOpenPickerUI fileOpenPickerUI = null;
现在给出MainPage.xaml.cs中AppActivate方法的代码,代码使用参数args的FileOpenPickerUI属性值初始化fileOpenPickerUI,并调用Activate方法激活当前页面。

public void AppActivate (FileOpenPickerActivatedEventArgs args)
{
    //初始化fileOpenPickerUI对象
    fileOpenPickerUI = args.FileOpenPickerUI;
    //激活MainPage页面
    Window.Current.Content = this;
    Window.Current.Activate();
}
下面继续来实现上面添加的“选择图片”按钮的功能,该按钮实现读取应用内部的一张图片,实现此功能的单击事件处理方法如下所示。

private async void AddLocalFileButton_Click(object sender, RoutedEventArgs e)
{
    StorageFile file = await Package.Current.InstalledLocation.GetFileAsync(@"Assets\蔬菜.jpg");
    fileOpenPickerUI.AddFile("imgKey", file);
}
代码首先使用GetFileAsync方法获得本应用Assets文件夹下的名为“蔬菜.jpg”的图片文件,将其保存在StorageFile类型的对象file中,接着调用AddFile方法将file对象添加到fileOpenPickerUI对象中,并为其指定了唯一的标记imgKey。
这样就创建好了第一个应用FileProvider,下面来实现第二个应用。
(2)创建获取文件的应用
打开Visual Studio 2012,新建一个名为FileFetcher的Windows应用商店的空白应用程序项目,在MainPage.xaml文件中添加如下代码,用于应用界面的展示。


   
   
        
        单击选择FileProvider应用
   

代码为应用添加了一个文本块、一个Image控件和一个按钮,文本块用来显示图片的名称,Image控件则用于展示图片文件,而“单击选择FileProvider应用”按钮用来通过文件选取器选择FileProvider应用。
布局好应用的界面后,接下来在MainPage.xaml.cs文件中为“单击选择FileProvider应用”按钮添加单击事件处理方法,实现按钮的功能,这里使用的单击事件处理方法如下所示。

private async void AddPhotoButton_Click(object sender, RoutedEventArgs e)
{
    //创建一个可写入和更新的位图对象
    WriteableBitmap writeAbleBitmap = new WriteableBitmap(200, 200);
    //创建文件选择器,并指定选择器显示文件的方式,选择器可以选择的文件类型。
    FileOpenPicker fileOpenPicker = new FileOpenPicker();
    fileOpenPicker.ViewMode = PickerViewMode.Thumbnail;
    fileOpenPicker.FileTypeFilter.Add(".jpg");
    StorageFile file = await fileOpenPicker.PickSingleFileAsync();
    if (file != null)
    {
        //打开图形文件,并将图形写入到数据流中
        IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read);
        //从数据流中读取图形数据并保存到位图对象中
        await writeAbleBitmap.SetSourceAsync(stream);
        ShowImg.Source = writeAbleBitmap;
        OutputTextBlock.Text = file.Name;
    }
}
代码首先新建一个可写入和更新的位图对象writeAbleBitmap,又创建了一个文件选取器对象fileOpenPicker,通过将其ViewMode属性的值设置为PickerViewMode.Thumbnail把选取器的视图模式设定为缩略图模式,并为选取器添加了.jpg文件的显示支持,然后调用PickSingleFileAsync方法选取一个图片文件,将其保存在file对象中,使用OpenAsync方法以数据流的形式读取file对象,并检查file对象是否为空,如果不为空把读到的数据保存在stream对象中,通过SetSourceAsync方法将stream对象设置为writeAbleBitmap的图像源,并将writeAbleBitmap对象赋值给Image控件的Source属性,把图片显示出来,最后在OutputTextBlock文本块中显示图片的名称。
至此第二个应用FileFetcher也实现了,查看运行效果时,这两个应用FileFetcher和FileProvider需要有运行的先后顺序,首先部署并运行FileProvider应用,然后启动FileFetcher应用,点击“单击选择FileProvider应用”按钮,会出现文件选取器窗口,在文件选取器窗口中选择FileProvider应用,FileProvider应用会被激活,如图13-9所示。
DSC0002.jpg

图13-9 FileProvider应用运行界面

单击图13-9中的“选择图片”按钮,文件选取器将获得FileProvider应用中的图片文件,单击文件选取器右下角的“打开”按钮,在FileFetcher应用界面中将显示名为“蔬菜.jpg”的图片,如图13-10

DSC0003.jpg
所示。图13-10 FileFetcher应用图片显示


注:本博客内容,选择机械工业出版社3月出版的《Windows 8 应用开发权威指南》第13章

运维网声明 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-69501-1-1.html 上篇帖子: 【Advanced Windows Phone Programming】在windows phone 8中录制MP3和AAC及Amr音频 下篇帖子: 企业部署Windows 8 Store 风格应用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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