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

Windows Phone 7 不温不火学习之《启动器与选择器》

[复制链接]

尚未签到

发表于 2015-5-9 05:49:19 | 显示全部楼层 |阅读模式
  Android 允许应用程序通过Action、URI等机制调用系统内置功能,比如打电话、发邮箱、发短信等。
  Windows Phone 7 也提供了类似的API提供开发人员使用,即启动器与选择器,但在Windows Phone 7 中他们是通过一套封装完整的Task 提供的。
  Windows Phone 应用程序模型将每个应用分离成各自独立的沙箱,包括运行时和文件存储。微软提供的这套API只要正确的实施,启动器和选择器框架可以为最终用户提供一个完全无缝的体验,他们完全感觉不到应用程序之间的切换。那么什么是启动器?什么是选择器?这个可以用Andriod 的一些小知识来理解。
  启动器 相当于Android 的Action提供一个动作,导向某个地方(功能,如发短信、打开网页、打电话等)。
  选择器 相当于Android 的Uri 可以通过这个Uri  返回一串数据,在Windows Phone 7应用程序也是一样,允许你从你手机中选择一些数据比如联系人的电话号码、相册中的一张图片等。
  
  以下是当前版本Windows Phone 7 支持的启动器和选择器的完整清单:
  EmailComposeTask --允许应用程序启动电子邮件应用程序并创建一条新消息;以此来让用户从应用程序发送电子邮件。
  
  MarketplaceDetailTask -- 允许应用程序启动Windows Phone Market 客户端应用程序并显示指定产品的详细信息页面。
  
  MarketPlaceHubTask -- 允许应用程序启动Windows Phone Market 的客户端应用程序。
  
  MarketPlaceReviewTask  -- 允许应用程序启动Windows Phone Market 客户端应用程序并显示指定产品的评论信息页面。
  
  MarketPlaceSearchTask --  允许应用程序启动Windows Phone Market 客户端应用程序并显示指定搜索条件的检索结果。
  
  ----奶奶的,好多商启的API,对这块这么重视 DSC0000.gif 。。。
  MediaPlayerLauncher --允许应用程序启动媒体播放器。
  
  PhoneCallTask --允许应用程序启动电话应用程序;使得用户能够在应用程序中开始打电话。
  
  SaveEmailAddressTask -- 允许应用程序启动联系人应用程序;以此允许用户从应用程序中保存电子邮件地址到一个新的或现有的联系人。
  
  SavePhoneNumberTask --允许应用程序启动联系人应用程序 ;以此允许用户从应用程序中保存电话号码到一个新的或现有的联系人。
  
  SearchTask -- 允许应用程序启动WEB 搜索应用程序。
  
  SmsComposeTask -- 允许应用程序启动Sms 应用程序。
  
  WebBrowserTask -- 允许应用程序启动Web 浏览器应用程序。
  
  Tip :由于本版本SDK提供的启动器和选择器API还属于Beta 版本,所以模拟器并不包括手机全部功能,故有些启动器和选择器的体验不完整。
  强调一下,所有使用启动器和选择器都必须引用此命名空间:Microsoft.Phone.Tasks;
  本篇学习内容,将会使用5个选择器和启动器来练习,加深到选择器和启动器的了解,下面先看一下DEMO运行效果:
   DSC0001.png
  点击保存联系人电话按钮,导航到:
   DSC0002.png
  输入一个号码,并保存,跳转到保存界面上,在这里你可以新建一个联系人或者保存到己经存在的联系人里面:
DSC0003.png
  保存成功后,点击返回,我们应用程序接收到保存完成的Task 返回值,弹出提示对话框:
DSC0004.png
  看看代码如何编写:
  
  根据上面的命令清单,我们知道保存电话号码来自SavePhoneNumberTask类,故我们可以利用它来完成这个功能:
  


  public partial class SaveContactInfoPage : PhoneApplicationPage
    {
        private SavePhoneNumberTask savePhoneNumberTask;
        public SaveContactInfoPage()
        {
            InitializeComponent();
            savePhoneNumberTask = new SavePhoneNumberTask();
            //声明一个监听,监听保存完成后的返回值
            savePhoneNumberTask.Completed += new EventHandler(savePhoneNumberTask_Completed);
        }
        void savePhoneNumberTask_Completed(object sender, TaskEventArgs e)
        {
            if (e.TaskResult==TaskResult.OK)
            {
                MessageBox.Show("电话号码保存成功","成功",MessageBoxButton.OK);
            }
            else
            {
                MessageBox.Show("你电话号码:" + e.Error.Message + " 保存失败", "失败", MessageBoxButton.OK);
            }
        }
        //保存命令
        private void btnSavePhone_Click(object sender, RoutedEventArgs e)
        {
            //正则表达式验证,参数1要验证的值,参数二要验证的正则表达式,参数三处理类型
            if (Regex.IsMatch(txtInput.Text,App.phoneNumberPattern,RegexOptions.IgnoreCase))
            {
                if (null!=savePhoneNumberTask)
                {
                    savePhoneNumberTask.PhoneNumber = txtInput.Text;
                    savePhoneNumberTask.Show();
                    txtInput.Text = "";
                }
                else
                {
                    MessageBox.Show("你的电话号码格式错误","验证输入",MessageBoxButton.OK);
                }
            }
        }
    }  
  同样的道理,我就不一一截图了,下面会提供源码,有兴趣的朋友可以尝试一下。
  
  执行搜索命令:
  


public partial class SearchPage : PhoneApplicationPage
    {
        public SearchPage()
        {
            InitializeComponent();
        }
        ///
        /// 搜索导航
        ///
        ///
        ///
        private void btnSearch_Click(object sender, RoutedEventArgs e)
        {
            SearchTask searchTask = new SearchTask();
            searchTask.SearchQuery = txtInput.Text;
            searchTask.Show();
        }
    }  
  
  

   打开浏览器代码:

public partial class BrowserWebPage : PhoneApplicationPage
    {
        public BrowserWebPage()
        {
            InitializeComponent();
        }
        private void btnGo_Click(object sender, RoutedEventArgs e)
        {
            if (Regex.IsMatch(txtInput.Text,App.urlPattern,RegexOptions.IgnoreCase))
            {
                WebBrowserTask webBrowserTask = new WebBrowserTask();
                webBrowserTask.URL = txtInput.Text;
                webBrowserTask.Show();
            }
            else
            {
                MessageBox.Show("你输入的地址有误","错误",MessageBoxButton.OK);
            }
        }
    }  
  
  启动媒体播放器代码并播放代码:
  


  public partial class VideoPlayerPage : PhoneApplicationPage
    {
        public VideoPlayerPage()
        {
            InitializeComponent();
        }
        ///
        /// 该函数将使用MediaPlayerLauncher ,应用程序可以通过它来启动媒体播放器
        /// 播放视频文件,如何用户选中“外部视频”复选框,它将播放一个基于WEB的视频流
        /// 否则就播放一个本地标志为“content”的视频文件。
        ///
        ///
        ///
        private void btnPlayVideo_Click(object sender, RoutedEventArgs e)
        {
            MediaPlayerLauncher mediaPlayerLauncher = new MediaPlayerLauncher();
            if (chkUseExternalMedia.IsChecked.Value)
            {
                mediaPlayerLauncher.Media = new Uri("http://ecn.channel9.msdn.com/o9/ch9/4/1/9/7/4/5/WPMetroDesignOverivew_ch9.wmv",UriKind.Absolute);
            }
            else
            {
                mediaPlayerLauncher.Location = MediaLocationType.Install;
                mediaPlayerLauncher.Media = new Uri("Media/Bear.wmv",UriKind.Relative);
            }
            mediaPlayerLauncher.Show();
        }
    }  
  注意,由于我使用的是模拟器,感觉播放视频的时候一卡一卡的,不知道在真机的效果会不会这样?
  
  使用联系人电话号码发送短信代码:
  


  ///
    /// 感觉跟使用PhoneNumberTask差不多
    ///
    public partial class UsePhoneNumberPage : PhoneApplicationPage
    {
        PhoneNumberChooserTask phoneNumberChooserTask;
        public UsePhoneNumberPage()
        {
            InitializeComponent();
            phoneNumberChooserTask = new PhoneNumberChooserTask();
            phoneNumberChooserTask.Completed += new EventHandler(phoneNumberChooserTask_Completed);
        }
        void phoneNumberChooserTask_Completed(object sender, PhoneNumberResult e)
        {
            if (e.TaskResult== TaskResult.OK)
            {
                SmsComposeTask smsComposeTask = new SmsComposeTask();
                smsComposeTask.Body = "你好,这是Terry";
                smsComposeTask.To = e.PhoneNumber;
                smsComposeTask.Show();
            }
            else if (e.TaskResult==TaskResult.Cancel)
            {
                MessageBox.Show("不能发送短信","未选择号码",MessageBoxButton.OK);
            }
            else
            {
                MessageBox.Show("发送出错"+e.Error.Message,"失败",MessageBoxButton.OK);
            }
        }
        private void btnSendSMS_Click(object sender, RoutedEventArgs e)
        {
            phoneNumberChooserTask.Show();
        }  
  
  
  本篇实例源码:
  启动器与选择器

运维网声明 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-65071-1-1.html 上篇帖子: Windows phone 7 OpenSource Project 下篇帖子: Windows Phone 7 不温不火学习之《页面导航》
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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