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

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,对这块这么重视。。。

MediaPlayerLauncher --允许应用程序启动媒体播放器。

 

PhoneCallTask --允许应用程序启动电话应用程序;使得用户能够在应用程序中开始打电话。

 

SaveEmailAddressTask -- 允许应用程序启动联系人应用程序;以此允许用户从应用程序中保存电子邮件地址到一个新的或现有的联系人。

 

SavePhoneNumberTask --允许应用程序启动联系人应用程序 ;以此允许用户从应用程序中保存电话号码到一个新的或现有的联系人。

 

SearchTask -- 允许应用程序启动WEB 搜索应用程序。

 

SmsComposeTask -- 允许应用程序启动Sms 应用程序。

 

WebBrowserTask -- 允许应用程序启动Web 浏览器应用程序。

 

Tip :由于本版本SDK提供的启动器和选择器API还属于Beta 版本,所以模拟器并不包括手机全部功能,故有些启动器和选择器的体验不完整。

强调一下,所有使用启动器和选择器都必须引用此命名空间:Microsoft.Phone.Tasks;

本篇学习内容,将会使用5个选择器和启动器来练习,加深到选择器和启动器的了解,下面先看一下DEMO运行效果:

点击保存联系人电话按钮,导航到:

输入一个号码,并保存,跳转到保存界面上,在这里你可以新建一个联系人或者保存到己经存在的联系人里面:

保存成功后,点击返回,我们应用程序接收到保存完成的Task 返回值,弹出提示对话框:

看看代码如何编写:

 

根据上面的命令清单,我们知道保存电话号码来自SavePhoneNumberTask类,故我们可以利用它来完成这个功能:

 

   public   partial   class  SaveContactInfoPage : PhoneApplicationPage
    {
        
private  SavePhoneNumberTask savePhoneNumberTask;

        
public  SaveContactInfoPage()
        {
            InitializeComponent();
            savePhoneNumberTask 
=   new  SavePhoneNumberTask();
            
// 声明一个监听,监听保存完成后的返回值
            savePhoneNumberTask.Completed  +=   new  EventHandler < TaskEventArgs > (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();
        }

        
///   <summary>
        
///  搜索导航
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         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();
        }

        
///   <summary>
        
///  该函数将使用MediaPlayerLauncher ,应用程序可以通过它来启动媒体播放器
        
///  播放视频文件,如何用户选中“外部视频”复选框,它将播放一个基于WEB的视频流
        
///  否则就播放一个本地标志为“content”的视频文件。
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         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();
        }
    }

 

注意,由于我使用的是模拟器,感觉播放视频的时候一卡一卡的,不知道在真机的效果会不会这样?

 

使用联系人电话号码发送短信代码:

 

   ///   <summary>
    
///  感觉跟使用PhoneNumberTask差不多
    
///   </summary>
     public   partial   class  UsePhoneNumberPage : PhoneApplicationPage
    {
        PhoneNumberChooserTask phoneNumberChooserTask;
        
public  UsePhoneNumberPage()
        {
            InitializeComponent();
            phoneNumberChooserTask 
=   new  PhoneNumberChooserTask();
            phoneNumberChooserTask.Completed 
+=   new  EventHandler < PhoneNumberResult > (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();
        }

 

 

 

本篇实例源码:

启动器与选择器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 据了解,苹果于2020年9月15日发布的iOS 14中,引入了一种叫做“特定地区设置”的新功能,该功能会根据用户所在的地理位置,限制部分应用的可用范围。在某些地区,该设置可能会影响mui.picker选择在iPhone 12上的正常使用。 此外,苹果在12系列中进行了诸多技术和硬件方面的升级,这可能会导致mui.picker选择未作出相应更改,无法与新的硬件设备进行兼容。因此,选择使用者可能需要更新选择的版本或等待厂商发布更新版本。 然而,需要注意的是,以上分析仅仅是对此问题的一种猜测,并未得到官方的确认。还需交流合作,共同解决此类问题。 ### 回答2: 据我们了解,最近在使用 mui.picker 选择时发现苹果12无法正常选择的情况确实存在。这个问题主要出现在 iOS 14 系统上,尤其是在苹果12设备上。实际上,mui.picker 选择是基于浮动层实现的,而由于 iOS 14 在设计上进行了调整,导致了选择无法弹出。 如果使用mui.picker选择无法选择的话,我们可以尝试使用其它替代方案,比如常规的HTML表单元素、jQuery、zepto插件等。如果非要使用mui.picker选择的话,我们可以尝试将mui.picker插件更新至最新版,或者自行调整插件代码以适应 iOS 14 的设计变化。 还有一种方法是使用H5的input[type="date"],它的UI也很好看,适用于弹窗中使用。 总之,由于这个问题的根本原因是 iOS 14 系统在设计上出现了问题,因此我们只能通过调整插件代码或者使用其它解决方案来解决这个问题。希望我们的回答能够帮到你,如果还有其他问题,请随时让我们知道。 ### 回答3: mui.picker选择是一款非常受欢迎的前端开发工具,它可以很好地实现数据选择的功能。然而,在苹果12上,用户在使用该工具时可能会发现无法正常选择数据的情况。 这主要是由于苹果12的操作系统更新,导致mui.picker选择与操作系统之间的兼容性出现了问题。虽然该问题可能会给一些开发者带来困扰,但是这并不意味着mui.picker选择已经不适用于苹果12了。实际上,开发者可以通过一些调试和优化的方法来解决这个问题。 首先,开发者可以尝试更新mui.picker选择的版本,以确保它可以与最新的操作系统兼容。如果这种方法没有效果,那么开发者还可以尝试寻找其他类似的数据选择工具,如各种插件程序和组件库,来替代mui.picker选择实现数据选择功能。当然,这些替代方案需要进行充分的测试和验证,以确保它们可以完美地和苹果12的操作系统兼容。 总之,对于苹果12上使用mui.picker选择无法选择数据的问题,开发者可以通过更新版本、替代方案等多种方法来解决。毕竟,随着科技的日益发展,前端开发工具和技术也在不断更新和进化,做好更新和迭代将能更好地服务于用户。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值