博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows phone 8 学习笔记(9) 集成
阅读量:6696 次
发布时间:2019-06-25

本文共 12663 字,大约阅读时间需要 42 分钟。

原文:

 本节整理了之前并没有提到的Windows phone 8 系统相关集成支持,包括选择器、锁定屏幕的、联系人的访问等。选择器列举了若干内置应用提供的相关支持;锁定屏幕展示了我们可以对锁定屏幕提供背景图像,屏幕通知等功能;联系人访问演示了对联系人的管理维护和只读访问。

快速导航:

   
   
   

一、选择器

选择器为手机内置应用对您的开发提供的相关支持,通过选择器你可以直接调用相机应用捕获一张照片到你的应用,或者调用联系人的相关资料,保存铃声等操作。

下面列举了大部分常用选择器:

    1.地址选择器
    2.相机拍照选择器
    3.邮箱选择器
    4.电话选择器
    5.照片选择器
    6.保存联系人选择器
    7.保存电子邮件地址选择器
    8.保存电话号码选择器
    9.保存铃声选择器

下面代码罗列了调用方法。

[C#]
//地址选择器        void showAddressChooserTask()        {            var addressChooserTask = new AddressChooserTask();            addressChooserTask.Completed += new EventHandler
((a, b) => { if (b.TaskResult == TaskResult.OK) { MessageBox.Show(b.DisplayName + "的地址是:" + b.Address); } }); addressChooserTask.Show(); } //相机拍照选择器 void showCameraCaptureTask() { var cameraCaptureTask = new CameraCaptureTask(); cameraCaptureTask.Completed += new EventHandler
((a, b) => { if (b.TaskResult == TaskResult.OK) { Image image = new Image(); var bitmapImage = new BitmapImage(); bitmapImage.SetSource(b.ChosenPhoto); image.Source = bitmapImage; ContentPanel.Children.Add(image); MessageBox.Show(b.OriginalFileName); } }); cameraCaptureTask.Show(); } //邮箱选择器 void showEmailAddressChooserTask() { var emailAddressChooserTask = new EmailAddressChooserTask(); emailAddressChooserTask.Completed += new EventHandler
((a, b) => { if (b.TaskResult == TaskResult.OK) { MessageBox.Show(b.DisplayName + "的邮箱是:" + b.Email); } }); emailAddressChooserTask.Show(); } //电话选择器 void showPhoneNumberChooserTask() { var phoneNumberChooserTask = new PhoneNumberChooserTask(); phoneNumberChooserTask.Completed += new EventHandler
((a, b) => { if (b.TaskResult == TaskResult.OK) { MessageBox.Show(b.DisplayName + "的电话是:" + b.PhoneNumber); } }); phoneNumberChooserTask.Show(); } //照片选择器 void showPhotoChooserTask() { var photoChooserTask = new PhotoChooserTask(); photoChooserTask.Completed += new EventHandler
((a, b) => { if (b.TaskResult == TaskResult.OK) { Image image = new Image(); var bitmapImage = new BitmapImage(); bitmapImage.SetSource(b.ChosenPhoto); image.Source = bitmapImage; ContentPanel.Children.Add(image); MessageBox.Show(b.OriginalFileName); } }); photoChooserTask.Show(); } //保存联系人选择器 void showSaveContactTask() { var saveContactTask = new SaveContactTask(); saveContactTask.Completed += new EventHandler
((a, b) => { switch (b.TaskResult) { case TaskResult.OK: MessageBox.Show("保存成功。"); break; case TaskResult.Cancel: MessageBox.Show("取消保存。"); break; case TaskResult.None: MessageBox.Show("保存失败。"); break; } }); //添加一些默认值 saveContactTask.FirstName = "三"; saveContactTask.LastName = "张"; saveContactTask.MobilePhone = "13900000000"; saveContactTask.Show(); } //保存电子邮件地址选择器 void showSaveEmailAddressTask() { var saveEmailAddressTask = new SaveEmailAddressTask(); saveEmailAddressTask.Completed += new EventHandler
((a, b) => { switch (b.TaskResult) { case TaskResult.OK: MessageBox.Show("保存成功。"); break; case TaskResult.Cancel: MessageBox.Show("取消保存。"); break; case TaskResult.None: MessageBox.Show("保存失败。"); break; } }); //添加默认值 saveEmailAddressTask.Email = "mail@163.com"; saveEmailAddressTask.Show(); } //保存电话号码选择器 void showSavePhoneNumberTask() { var savePhoneNumberTask = new SavePhoneNumberTask(); savePhoneNumberTask.Completed += new EventHandler
((a, b) => { switch (b.TaskResult) { case TaskResult.OK: MessageBox.Show("保存成功。"); break; case TaskResult.Cancel: MessageBox.Show("取消保存。"); break; case TaskResult.None: MessageBox.Show("保存失败。"); break; } }); //添加默认值 savePhoneNumberTask.PhoneNumber = "13900000000"; savePhoneNumberTask.Show(); } //保存铃声选择器 void showSaveRingtoneTask() { var saveRingtoneTask = new SaveRingtoneTask(); saveRingtoneTask.Completed += new EventHandler
((a, b) => { switch (b.TaskResult) { case TaskResult.OK: MessageBox.Show("保存成功。"); break; case TaskResult.Cancel: MessageBox.Show("取消保存。"); break; case TaskResult.None: MessageBox.Show("保存失败。"); break; } }); //铃声文件路径 saveRingtoneTask.Source = new Uri("appdata:/烟花易冷.mp3"); //铃声在列表中的显示名称 saveRingtoneTask.DisplayName = "烟花易冷"; saveRingtoneTask.Show(); }

 

二、锁定屏幕

在手机锁定屏幕界面,我们的应用可以更新背景图像和添加屏幕通知。

2.锁定屏幕背景

要使应用能够更新锁定屏幕背景图像,我们必须在应用程序清单文件中声明。右键选择打开方式,选择XML文本编辑器打开WMAppManifest.xml,在Tokens下添加扩展内容。

[XML]

下面看看如何更新手机锁定屏幕背景为安装文件夹下的1.jpg图片。

[C#]
private async void SetLockImg()        {            try            {                //指示当前应用是否为锁定屏幕提供程序                var isProvider = Windows.Phone.System.UserProfile.LockScreenManager.IsProvidedByCurrentApplication;                if (!isProvider)                {                    //设置当前应用为锁定屏幕提供程序                    var op = await Windows.Phone.System.UserProfile.LockScreenManager.RequestAccessAsync();                    //应用是否已设置为锁定屏幕提供程序                    isProvider = op == Windows.Phone.System.UserProfile.LockScreenRequestResult.Granted;                }                if (isProvider)                {                    // 设置锁定屏幕的背景图像                    Windows.Phone.System.UserProfile.LockScreen.SetImageUri(new Uri("ms-appx:///1.jpg", UriKind.Absolute));                    // 获取锁定屏幕的图像                    var currentImage = Windows.Phone.System.UserProfile.LockScreen.GetImageUri();                    System.Diagnostics.Debug.WriteLine("The new lock screen background image is set to {0}", currentImage.ToString());                }                else                {                    MessageBox.Show("不能提供锁定屏幕背景 ");                }            }            catch             {            }        }

 

2.锁定屏幕通知

应用可以设置通知信息并展示到锁定屏幕的通知区域,我们需要首先在应用程序清单文件中指定用于显示徽标的png图片文件。我们右键选择打开方式,选择XML文本编辑器打开WMAppManifest.xml,设定徽标为LockImage.png。修改Tokens标记的DeviceLockImageURI元素如下:

[XML]
LockImage.png

 

另外,我们还需要在清单文件中声明我们可以在锁定屏幕中显示通知。右键选择打开方式,选择XML文本编辑器打开WMAppManifest.xml,在Tokens下添加扩展内容。

[XML]

 

设置完成后,我们就可以在锁定屏幕展示通知了,但具体的展示还需要用户在系统设置的锁定屏幕页,添加我们的应用为锁定屏幕通知提供程序。全部设置好后,只要默认的图标有通知的数值,这个时候锁定屏幕提示就会展示。

3.从锁定屏幕设置页启动应用

注册为锁定屏幕背景提供程序后,我们的应用可以从锁定屏幕设置页启动,默认打开mainpage,我们需要处理启动uri。

[C#]
//从系统锁定屏幕设置页面打开时的处理        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)        {            base.OnNavigatedTo(e);            string lockscreenKey = "WallpaperSettings";            string lockscreenValue = "0";            bool lockscreenValueExists = NavigationContext.QueryString.TryGetValue(lockscreenKey, out lockscreenValue);            if (lockscreenValueExists)            {                //这里可以定义一个锁定屏幕背景增强设置的页面。                MessageBox.Show("从锁定屏幕设置打开。");            }        }

 

三、联系人访问

手机内置的联系人数据库支持编程的方式去访问。我们有两种方式访问,一种是只读访问,还有一种是可以执行增删改查操作。

1.只读联系人访问

下面演示了通过查询返回只读联系人列表。

[C#]
//联系人数据        private void Button_Click_1(object sender, RoutedEventArgs e)        {            Contacts cons = new Contacts();            cons.SearchCompleted += new EventHandler
(Contacts_SearchCompleted); //参数1: 关键字;参数2:过滤类型,包含显示名称、电话号码、邮件地址、是否固定到开始屏幕等 cons.SearchAsync("139", FilterKind.PhoneNumber, "状态"); } void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e) { //获取到的联系人的集合 listbox1.ItemsSource = e.Results; }

 

2.自定义联系人存储

通过这种方式我们可以对系统联系人列表做各类增删改查操作,我们将演示如何操作。

[XAML]

 

[C#]
public partial class MainPage : PhoneApplicationPage    {        // 构造函数        public MainPage()        {            InitializeComponent();            Query();        }        //新增联系人        async Task Add(string familyName, string givenName)        {            ContactStore store = await ContactStore.CreateOrOpenAsync();            StoredContact contact = new StoredContact(store);            contact.FamilyName = familyName;            contact.GivenName = givenName;            //获取已知联系人属性            IDictionary
props = await contact.GetPropertiesAsync(); props.Add(KnownContactProperties.Telephone, "18600000000"); //获取扩展的联系人属性 IDictionary
extprops = await contact.GetExtendedPropertiesAsync(); extprops.Add("扩展", "扩展属性"); await contact.SaveAsync(); } //查询联系人,并绑定到列表 async void Query() { ContactStore store = await ContactStore.CreateOrOpenAsync(); ContactQueryResult result = store.CreateContactQuery(); IReadOnlyList
contacts = await result.GetContactsAsync(); listbox1.ItemsSource = contacts; } //查询已知属性 async void GetPropertie(StoredContact contact) { IDictionary
props = await contact.GetPropertiesAsync(); if (props.Keys.Contains(KnownContactProperties.Telephone)) { MessageBox.Show("手机:" + props[KnownContactProperties.Telephone].ToString()); } } //更新联系人 async Task Update(string Id) { try { ContactStore store = await ContactStore.CreateOrOpenAsync(); var contact = await store.FindContactByIdAsync(Id); if (contact != null) { contact.FamilyName = "赵"; contact.GivenName = "六"; await contact.SaveAsync(); } } catch (Exception e) { textblock1.Text = e.Message; } } //删除联系人 async private Task Delete(string Id) { try { ContactStore store = await ContactStore.CreateOrOpenAsync(); await store.DeleteContactAsync(Id); } catch (Exception e) { textblock1.Text = e.Message; } } //新增 private async void Button_Click_1(object sender, RoutedEventArgs e) { string[] familyNames = new string[] { "赵", "钱", "孙", "李", "周" }; string[] givenNames = new string[] {"云","权","飞燕","白","公瑾" }; Random r = new Random(); await Add(familyNames[r.Next(0, familyNames.Length)], givenNames[r.Next(0, givenNames.Length)]); Query(); } //修改 private async void Button_Click_2(object sender, RoutedEventArgs e) { var contact= listbox1.SelectedValue as StoredContact; if (contact == null) return; await Update(contact.Id); Query(); } //删除 private async void Button_Click_3(object sender, RoutedEventArgs e) { var contact = listbox1.SelectedValue as StoredContact; if (contact == null) return; await Delete(contact.Id); Query(); } //查看手机号 private void Button_Click_4(object sender, RoutedEventArgs e) { var contact = listbox1.SelectedValue as StoredContact; if (contact == null) return; GetPropertie(contact); } private void Button_Click_5(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative)); } }

 

作者:李盼(Lipan)
出处: ( )
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。
下一篇:没有了》
你可能感兴趣的文章
btrfs文件系统管理与应用
查看>>
SpringMVC视图解析器概述
查看>>
SQL Server 自动化运维系列 - 监控磁盘剩余空间及SQL Server错误日志(Power Shell)...
查看>>
English Phonetic Spelling Alphabet
查看>>
linux下访问ftp服务器和文件传输
查看>>
极力推荐python初学者使用wingIDE
查看>>
[NOIP2014] 普及组
查看>>
HDU 1017 A Mathematical Curiosity【水,坑】
查看>>
ASP.NET JsonHelper类
查看>>
加密算法整理概述
查看>>
gridlayout小例子
查看>>
微信小程序 + Bmob后端云
查看>>
EntityFramework之原始查询如何查询未映射的值,你又知道多少?
查看>>
怎么使用T-sql生成两位字母
查看>>
自己动手编译octave 4.0.0
查看>>
【Java自学笔记系列:数组】
查看>>
Django之url路由
查看>>
二叉树的所有路径
查看>>
java反射机制的原理与简单使用
查看>>
CentOs
查看>>