阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 1578|回复: 0

[转帖] PhoneGap 的 WP7 技巧: 编写 PhoneGap 插件用来发送短信

[复制链接]
  • TA的每日心情
    开心
    2012-3-7 10:15
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    发表于 2012-1-3 10:55:30 | 显示全部楼层 |阅读模式
    在这篇文章红,将展示如何在 Windows Phone 上使用 PhoneGap 开发发送短信的应用,我们将通过 Microsoft.Phone.Tasks 命名空间中的 SMSCompose 来实现。PhoneGap 有实现对之进行封装的插件。
    PhoneGap 提供不少跨平台的 API 用于处理各个平台之间的差异,包括定位、存储、声音等等。而你的程序只需要使用 PhoneGa 提供的统一接口即可。但某些平台具有一些其他平台没有的特性时,你就需要利用 PhoneGap 的插件来进行处理。
    接下来我们将编写一个 PhoneGap 插件用来发送短信,首先我们看 C# 是怎么发送短信的:
    view source
    print?

    1SmsComposeTask smsTask = new SmsComposeTask();

    2smsTask.To = "4045551212";

    3smsTask.Body = "Message from oschina.net, sir!";

    4smsTask.Show();




    很简单直接是吧,需要注意的是这个发送短信是没有返回值的。接下来我们要提供一个 JavaScript 函数用来调用这个发送短信的方法,形如:
    view source
    print?

    1sendSMS.send(‘4045551212’, ’Hello oschina.net’);




    整个过程需要两步走:首先,我们将上述的 C# 代码封装到一个类中的方法,在 PhoneGap 应用的项目结构图如下:
    右键插件文件夹,选择 Add New Item. 选择 Class 并填写你希望的名字,这里我们使用的是 SendSMS.cs. 该类有大量附加的 using 语句我们并不需要,删除它们就是了。
    接下来我们需要修改命名空间,默认该命名空间就是我们的 Visual Studio 项目。但我们现在需要将该类做为 PhoneGap 运行库命名空间,因此将该类的命名空间修改为 WP7GapClassLib.PhoneGap.Commands. 另外我们还必须继承 PhoneGap 运行库的 BaseCommand 类,以便我们可以在 JavaScript 中调用到该类,只需要将类名后增加 : BaseCommand 即可。
    接下来,在SendSMS类中我们需要一个方法来处理短信发送的代码,我们创建一个 send 方法,因为需要使用 SmsCompose 任务,因此需要引入 using Microsoft.Phone.Tasks ,代码如下:
    view source
    print?

    01using Microsoft.Phone.Tasks;

    02

    03namespace WP7GapClassLib.PhoneGap.Commands

    04{

    05    public class SendSMS : BaseCommand

    06    {

    07        public void send(string args)

    08        {

    09            SmsComposeTask smsTask = new SmsComposeTask();

    10            smsTask.To = "(678) 555-1212”;

    11            smsTask.Body = "Hello oschina.net";

    12            smsTask.Show();

    13        }

    14    }

    15}




    为了简单,接收者和短信内容我们写死了。
    下一步就是如何在 JavaScript 中调用到这个 send 方法,下面是 JavaScript 的代码:这是存放在项目中的一个 js 文件:
    view source
    print?

    01function SMSComposer(){     

    02    this.resultCallback = null;

    03}

    04

    05SMSComposer.prototype.showSMSComposer = function(toRecipients, body)

    06{

    07    var args = {};     

    08

    09    if(toRecipients)         

    10        args.toRecipients = toRecipients;     

    11

    12    if(body)

    13        args.body = body;

    14

    15    PhoneGap.exec(null, null, "SendSMS", "send", args);

    16

    17}

    18

    19PhoneGap.addConstructor(function () {

    20    if (!window.plugins) {

    21        window.plugins = {};

    22    }

    23    window.plugins.smsComposer = new SMSComposer();

    24  }

    25);




    好了,现在可以忘记你的 C# 代码了。
    接下来我们只需要在页面中通过 <script> 标签引入刚定义的 js 文件,并调用如下方法:
    window.plugins.smsComposer.showSMSComposer(recipients, message)
    该方法接收一到多个号码和一个短信内容的参数。
    最后我们还需要对 C# 代码进行处理让它接收这个 JSON 格式的 args 参数,因此需要使用 .NET 的反序列化库进行处理,下面是具体的代码:
    view source
    print?

    01using Microsoft.Phone.Tasks;

    02using System.Runtime.Serialization;

    03

    04namespace WP7GapClassLib.PhoneGap.Commands

    05{

    06    public class sendSMSargs

    07    {

    08        [DataMember]

    09        public string toRecipients;

    10

    11        [DataMember]

    12        public string body;

    13     }

    14

    15    public class SendSMS : BaseCommand

    16    {

    17        public void send(string args)

    18        {

    19            sendSMSargs myargs = JSON.JsonHelper.Deserialize<sendSMSargs>(args);

    20            

    21            SmsComposeTask smsTask = new SmsComposeTask();

    22            smsTask.To = myargs.toRecipients;

    23            smsTask.Body = myargs.body;

    24            smsTask.Show();

    25                        

    26            this.DispatchCommandResult();

    27        }

    28    }

    29}




    如果你需要在 Windows Phone 7 项目中使用该插件,你只需要一个 C# 类,并在 JavaScript 中调用 PhoneGap.exec 即可.
    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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