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

Windows phone 8 学习笔记(9) 集成

[复制链接]

尚未签到

发表于 2015-5-22 13:41:15 | 显示全部楼层 |阅读模式
  本节整理了之前并没有提到的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));
}
}

DSC0000.png


作者:李盼(Lipan)
出处:[Lipan] (http://www.iyunv.com/lipan/)
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。


《上一篇:Windows phone 8 学习笔记 定位地图导航
系列目录
下一篇:没有了》

运维网声明 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-69618-1-1.html 上篇帖子: Windows 8 RC升级到RTM很顺利 下篇帖子: Windows Phone 8初学者开发—第15部分:在选中ListItem时播放声音
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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