zoukankan      html  css  js  c++  java
  • wp8.1 Study13:在WP8.1中分享文件和数据

      绪论:不同于windows, 在wp8.1中,如果不止一个程序可以接受其Uri或者文件,shell会提供一个界面让用户选择用哪个程序。而在windows中,用户可以在设置那里设置各种文件和Uri的默认程序。在wp8.1中,分享文件和数据过程如图:

    一、Uri与file关联

    1、定制Uri关联

      我们可以利用Uri关联,登录其他程序完成任务,如进入设备设置等,链接IE浏览器(http),邮箱(mailto),信息等,简单例子如下:

    例子一:

    private async void bt1_Click(object sender, RoutedEventArgs e)
    {
    await Launcher.LaunchUriAsync(new Uri("http://www.baidu.com"));
    }

    例子二: 

    await Launcher.LaunchUriAsync(    new Uri("fb://profile/1234"), 
        new LauncherOptions         { FallbackUri = new Uri("http://facebook.com/profile.php?id=1234") }    );//LauncherOptions是后备方案,当手机中没有fb,就打开浏览器中的网页。

    2、文件关联

    通俗来说,文件关联就是用其他程序打开你程序中想打开的文件,如打开你程序中的pdf文件,例子如下:

    var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata://Local/mydoc.pdf"));
    await Launcher.LaunchFileAsync(file);

    注:自己也可以制作相应的程序来handle文件或Uri,即让你程序成为Target,在这不详细说明了。

    二、wp8.1中分享数据

      在任何手机中分享数据是很经常的,如分享图片到朋友圈等。wp8.1中,分享数据的体验如下:

      而分享数据的内部机制如下:

      这可以让用户在不同的程序之间中分享数据,同时许多app可以成为分享源,但只有一些可以成为分享目标。(下面只介绍对分享源操作)

    1、对分享源操作

      在你分享界面中,加入以下代码:

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        navigationHelper.OnNavigatedTo(e);
        DataTransferManager.GetForCurrentView().DataRequested += OnShareDataRequested;
    }
    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
        navigationHelper.OnNavigatedFrom(e);
        DataTransferManager.GetForCurrentView().DataRequested -= OnShareDataRequested;
    }
    
    private void AppBarButton_Click(object sender, RoutedEventArgs e)
    {
        DataTransferManager.ShowShareUI();
    }

      而根据你分享的数据是什么类型的,编写相对应的OnShareDataRequested()方法。

    比如分享简单的文字:

    void OnShareDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
    {
        var request = args.Request;
    
        request.Data.Properties.Title = "Share example"; //You MUST set a Title!
        request.Data.Properties.Description =
               "This demonstrates how to share text to another app";
        request.Data.SetText(TextToShare.Text.Trim());
    }

    比如分享图片:

    // Handle DataRequested event and provide DataPackage
    async void OnShareDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
    {
        var dp = args.Request.Data;
        var deferral = args.Request.GetDeferral();
        var photoFile = await StorageFile.GetFileFromApplicationUriAsync(                              new Uri("ms-appx:///Assets/needle.jpg"));
    
        dp.Properties.Title = "Space Needle";
        dp.Properties.Description = "The Space Needle in Seattle, WA";
        dp.SetStorageItems(new List<StorageFile> { photoFile });
        dp.SetWebLink(new Uri("http://seattletimes.com/ABPub/2006/01/10/2002732410.jpg"));
        deferral.Complete();
    }

    set方法有很多类型,这里只体现一些:

  • 相关阅读:
    ORM中介模型 + auth模块(用户登录校验)
    ModelForm
    Form组件------注册
    信贷相关业务
    pymongo
    开发者工具使用
    kindeditor文字编辑器 文章点赞评论操作
    VS Code:设置多行注释快捷键
    Nodejs:npm run build之后,distindex.html页面在火狐中可以正常显示登录页面并登录成功,在Chrome中可以正常显示登录页面,登录失败
    Maven:项目结构
  • 原文地址:https://www.cnblogs.com/NEIL-X/p/4190117.html
Copyright © 2011-2022 走看看