Windows Phone中的选择器事件详解
在windows phone中,除了启动器之外,还有很多,类似于保存电话号码,选择好友等一系列的功能,它们被称为选择器。
选择器和启动器的区别:启动器在启动这些功能的时候,并没有强行要求运行完成后立即返回到你正在开发的应用程序中,也就是说没有一个明确的返回值返回到你的应用程序中。而选择器则不同,如果我们启动了一个相机应用程序,那么很明显用户在拍照之后,我们的应用程序应该会去处理这张照片,是该保存还是该放弃等。
这些选择器的一个共同的使用格式是,都有一个show方法和一个completed事件,使用show方法来显示供用户选择的界面,使用complete监听并处理用户完成操作之后的细节。
windows phone中的选择器:
• cameracapturetask
• emailaddresschoosertask
• photochoosertask
• savecontacttask
• phonenumberchoosertask
• addresschoosertask
• gameinvitetask
• saveemailaddresstask
• savephonenumbertask
• saveringtonetask
cameracapturetask
cameracapturetask 通过相机拍摄任务,用户能够从您的应用程序中使用内置“相机”应用程序拍摄照片。如果用户完成此任务,将会引发一个事件,并且事件处理程序将会在结果中收到一张照片。
注意:
从 windows phone os 7.1 开始,我们便可以直接在自己的应用程序中使用设备相机。
通过调用 cameracapturetask 对象的 show 方法启动“相机”应用程序。通过处理 completed 事件获取选择器操作的结果。
使用方式:
cameracapturetask mycameracapturetask;//创建照相任务实例
//拍照
mycameracapturetask = new cameracapturetask();//实例化
mycameracapturetask.completed += new eventhandler<photoresult>(mycameracapturetask_completed);//增添事件处理
try
{
mycameracapturetask.show();//显示应用程序
}
catch (system.invalidoperationexception ex)
{
messagebox.show(ex.message);
}
完成事件:
//拍照完成
void mycameracapturetask_completed(object sender, photoresult e)
{
if (e.taskresult == taskresult.ok)//拍照完成
{
messagebox.show(e.chosenphoto.length.tostring());
}
}
emailaddresschoosertask
emailaddresschoosertask使用电子邮件地址选择器任务可获取用户选择的联系人的电子邮件地址。此任务启动“联系人”应用程序,以便用户能够选择联系人。如果用户完成此任务,将会引发一个事件,并且事件处理程序将会在结果中收到一个地址。
使用方式:
emailaddresschoosertask myemailaddresschoosertask;//创建邮件地址选择任务实例
//邮件地址
myemailaddresschoosertask = new emailaddresschoosertask();
myemailaddresschoosertask.completed += new eventhandler<emailresult>(myemailaddresschoosertask_completed);
try
{
myemailaddresschoosertask.show();//显示邮件地址选择
}
catch (system.invalidoperationexception ex)
{
messagebox.show(ex.message);
}
完成事件:
//邮件地址选择完成
void myemailaddresschoosertask_completed(object sender, emailresult e)
{
if (e.taskresult == taskresult.ok)//选择完成
{
messagebox.show("the email for " + e.displayname + " is " + e.email);
}
}
photochoosertask
使用照片选择器任务使用户能够从电话中选择现有照片。此任务可以启动照片选择器应用程序。如果用户完成此任务,将会引发一个事件,并且事件处理程序将会在结果中收到一张照片。
属性:
• pixelheight获取或设置在照片选择过程中由用户设置的裁剪区域纵横比的最大高度和高度。
• pixelwidth获取或设置在照片选择过程中由用户设置的裁剪区域纵横比的最大高度和高度组件。
• showcamera获取或设置在照片选择过程中是否向用户显示用于启动相机的按钮。
使用方式:
photochoosertask myphotochoosertask;//创建照片选择任务实例
//照片选择
myphotochoosertask = new photochoosertask();
myphotochoosertask.completed += new eventhandler<photoresult>(myphotochoosertask_completed);
try
{
myphotochoosertask.show();
}
catch (system.invalidoperationexception ex)
{
messagebox.show(ex.message);
}
完成事件:
//照片选择完成
void myphotochoosertask_completed(object sender, photoresult e)
{
if (e.taskresult == taskresult.ok)
{
messagebox.show(e.chosenphoto.length.tostring());//在这里关于照片的事件,完全可以使用{bitmap mybitmap=new bitmap();mybitmap.setsource(e.chosenphoto);}使用照片
}
}
savecontacttask
使用保存联系人任务可使用户能够通过您的应用程序保存联系人。此任务启动“联系人”应用程序。
属性:
• firstname获取或设置联系人的名字。
• lastname获取或设置联系人的姓氏。
• middlename获取或设置联系人的中名。
• title获取或设置联系人名字的别称。
• workphone获取或设置与联系人关联的工作电话号码。
• workemail获取或设置与联系人关联的工作电子邮件地址。
• mobilephone获取或设置与联系人关联的移动电话号码。
使用方式:
savecontacttask mysavecontacttask;//创建保存联系人任务实例
//保存联系人
mysavecontacttask=new savecontacttask ();
mysavecontacttask.completed += new eventhandler<savecontactresult>(mysavecontacttask_completed);
try
{
mysavecontacttask.firstname = "丽";
mysavecontacttask.lastname = "李";
mysavecontacttask.mobilephone = "1101101101";
mysavecontacttask.show();
}
catch (system.invalidoperationexception ex)
{
messagebox.show(ex.message);
}
完成事件:
//保存联系人任务完成
void mysavecontacttask_completed(object sender, savecontactresult e)
{
switch (e.taskresult)
{
case taskresult.ok:
messagebox.show("contact saved.");
break;
case taskresult.cancel:
messagebox.show("save cancelled.");
break;
case taskresult.none:
messagebox.show("contact could not be saved.");
break;
}
}
phonenumberchoosertask
使用电话号码选择器任务可获取用户选择的联系人的电话号码。此任务启动“联系人”应用程序,以便用户能够选择联系人。如果用户完成此任务,将会引发一个事件,并且事件处理程序将会在结果中收到一个电话号码。
使用方式:
phonenumberchoosertask myphonenumberchoosertask;//创建电话号码选择器实例
//电话号码选择器
myphonenumberchoosertask = new phonenumberchoosertask();
myphonenumberchoosertask.completed += new eventhandler<phonenumberresult>(myphonenumberchoosertask_completed);
try
{
myphonenumberchoosertask.show();
}
catch (system.invalidoperationexception ex)
{
messagebox.show(ex.message);
}
完成事件:
//电话号码选择完毕
void myphonenumberchoosertask_completed(object sender, phonenumberresult e)
{
if (e.taskresult == taskresult.ok)
{
messagebox.show("the phone number for " + e.displayname + " is " + e.phonenumber);
}
}
addresschoosertask
使用地址选择器任务可获取用户选择的联系人的物理地址。此任务启动“联系人”应用程序,以便用户能够选择联系人。如果用户完成此任务,将会引发一个事件,并且事件处理程序将会在结果中收到一个地址。
使用方式:
addresschoosertask myaddresschoosertask;//创建地址选择实例
//地址选择
myaddresschoosertask = new addresschoosertask();
myaddresschoosertask.completed += new eventhandler<addressresult>(myaddresschoosertask_completed);
try
{
myaddresschoosertask.show();
}
catch (system.invalidoperationexception ex)
{
messagebox.show(ex.message);
}
完成事件:
//地址选择完成
void myaddresschoosertask_completed(object sender, addressresult e)
{
if (e.taskresult == taskresult.ok)
{
messagebox.show("the address for " + e.displayname + " is " + e.address);
}
}
gameinvitetask
使用游戏邀请任务可以显示游戏邀请屏幕,该屏幕允许用户邀请多个玩家加入一个多人游戏会话。邀请是异步发送的。
注意:仅当从游戏中调用,且该游戏经批准可在 windows phone 上的 xbox live 中发布时,游戏邀请任务才有效。
属性:
• sessionid获取或设置标识网络会话的字符串。
使用方式:
gameinvitetask mygameinvitetask;//创建游戏邀请实例
//游戏邀请
mygameinvitetask = new gameinvitetask();
mygameinvitetask.completed += new eventhandler<taskeventargs>(mygameinvitetask_completed);
try
{
mygameinvitetask.sessionid = "my session id";//不能执行啊,没有实际的id
mygameinvitetask.show();
}
catch (system.invalidoperationexception ex)
{
messagebox.show(ex.message);
}
完成事件:
//游戏邀请完成
void mygameinvitetask_completed(object sender, taskeventargs e)
{
switch (e.taskresult)
{
case taskresult.ok:
messagebox.show("game invitation sent.");
break;
case taskresult.cancel:
messagebox.show("game invitation cancelled.");
break;
case taskresult.none:
messagebox.show("game invitation could not be sent.");
break;
}
}
saveemailaddresstask
使用保存电子邮件地址任务可使用户能够通过您的应用程序保存电子邮件地址。此任务启动“联系人”应用程序。
属性:
• email获取或设置可以保存到联系人的电子邮件地址。
使用方式:
saveemailaddresstask mysaveemailaddresstask;//创建保存邮件地址实例
//邮件地址保存
mysaveemailaddresstask = new saveemailaddresstask();
mysaveemailaddresstask.completed += new eventhandler<taskeventargs>(mysaveemailaddresstask_completed);
try
{
mysaveemailaddresstask.email = "";
mysaveemailaddresstask.show();
}
catch (system.invalidoperationexception ex)
{
messagebox.show(ex.message);
}
完成事件:
//保存邮件地址完成
void mysaveemailaddresstask_completed(object sender, taskeventargs e)
{
switch (e.taskresult)
{
case taskresult.ok:
messagebox.show("email saved.");
break;
case taskresult.cancel:
messagebox.show("save cancelled.");
break;
case taskresult.none:
messagebox.show("email could not be saved.");
break;
}
}
savephonenumbertask
使用保存电话号码任务可使用户能够通过您的应用程序保存电话号码。此任务启动“联系人”应用程序。
属性:
• phonenumber获取或设置可以保存到联系人的电话号码。
使用方式:
savephonenumbertask mysavephonenumbertask;//创建保存联系电话实例
//保存联系电话
mysavephonenumbertask = new savephonenumbertask();
mysavephonenumbertask.completed += new eventhandler<taskeventargs>(mysavephonenumbertask_completed);
try
{
mysavephonenumbertask.phonenumber = "111111111";
mysavephonenumbertask.show();
}
catch (system.invalidoperationexception ex)
{
messagebox.show(ex.message);
}
完成事件:
//保存联系电话
void mysavephonenumbertask_completed(object sender, taskeventargs e)
{
switch (e.taskresult)
{
case taskresult.ok:
messagebox.show("phone number saved.");
break;
case taskresult.cancel:
messagebox.show("save cancelled.");
break;
case taskresult.none:
messagebox.show("phone number could not be saved.");
break;
}
}
saveringtonetask
使用保存铃声任务,用户可以将音频文件保存到铃声列表中。此任务会启动“铃声”应用程序,其中用户可以保存铃声而且可以选择将其设置为默认铃声。将音频文件添加到该列表后,用户就可以在“联系人”应用程序中将其设置为各个联系人的铃声。
铃声音频文件必须满足以下要求:
• 文件类型必须为 mp3 或 wma。
• 文件大小必须小于 1 mb。
• 文件播放的时长必须小于 40 秒。
• 文件不得具有数字版权管理 (drm) 保护。
属性:
• displayname用于在选取器中标识铃声的名称。
• isshareable指示其他应用程序是否可以访问此铃声的标志。
• source要添加到铃声目录的音频文件本地副本的文件路径。
使用方式:
saveringtonetask mysaveringtonetask;//创建保存铃声实例
//保存铃声
mysaveringtonetask = new saveringtonetask();
mysaveringtonetask.completed += new eventhandler<taskeventargs>(mysaveringtonetask_completed);
try
{
mysaveringtonetask.source = new uri("test.wma");
mysaveringtonetask.displayname = "my name";
mysaveringtonetask.show();
}
catch (system.invalidoperationexception ex)
{
messagebox.show(ex.message);
}
完成事件:
//保存铃声
void mysaveringtonetask_completed(object sender, taskeventargs e)
{
switch (e.taskresult)
{
case taskresult.ok:
messagebox.show("ringtone saved.");
break;
case taskresult.cancel:
messagebox.show("save cancelled.");
break;
case taskresult.none:
messagebox.show("ringtone could not be saved.");
break;
}
}
摘自 waitingsky