PhoneGap的Windows Phone7技巧: 编写PhoneGap插件用来发送短信

openkk 12年前
     <p>在这篇文章红,将展示如何在 Windows Phone 上使用 PhoneGap 开发发送短信的应用,我们将通过 <a href="/misc/goto?guid=4959499974044886065" rel="nofollow">Microsoft.Phone.Tasks</a> 命名空间中的 <a href="/misc/goto?guid=4959499974175450384" rel="nofollow">SMSCompose</a> 来实现。PhoneGap 有实现对之进行封装的插件。</p>    <p>PhoneGap 提供不少跨平台的 API 用于处理各个平台之间的差异,包括定位、存储、声音等等。而你的程序只需要使用 PhoneGa 提供的统一接口即可。但某些平台具有一些其他平台没有的特性时,你就需要利用 PhoneGap 的插件来进行处理。</p>    <p>接下来我们将编写一个 PhoneGap 插件用来发送短信,首先我们看 C# 是怎么发送短信的:</p>    <pre class="brush:c#; toolbar: true; auto-links: false;">SmsComposeTask smsTask = new SmsComposeTask(); smsTask.To = "4045551212"; smsTask.Body = "Message from open-open.com, sir!"; smsTask.Show();</pre>    <p></p>    <p>很简单直接是吧,需要注意的是这个发送短信是没有返回值的。接下来我们要提供一个 JavaScript 函数用来调用这个发送短信的方法,形如:</p>    <pre class="brush:js; toolbar: true; auto-links: false;">sendSMS.send(‘4045551212’, ’Hello open-open.com’);</pre>    <p></p>    <p>整个过程需要两步走:首先,我们将上述的 C# 代码封装到一个类中的方法,在 PhoneGap 应用的项目结构图如下:</p>    <p><a href="/misc/goto?guid=4959499974307810814" rel="nofollow"><img title="image" alt="PhoneGap的Windows Phone7技巧: 编写PhoneGap插件用来发送短信" src="https://simg.open-open.com/show/2c052427689892a69336b7b2e1153dd3.png" width="423" height="502" /></a></p>    <p>右键插件文件夹,选择 <strong>Add New Item</strong>. 选择 <strong>Class</strong> 并填写你希望的名字,这里我们使用的是 <strong>SendSMS.cs</strong>. 该类有大量附加的 <strong>using</strong> 语句我们并不需要,删除它们就是了。</p>    <p>接下来我们需要修改命名空间,默认该命名空间就是我们的 Visual Studio 项目。但我们现在需要将该类做为 PhoneGap 运行库命名空间,因此将该类的命名空间修改为 <strong>WP7GapClassLib.PhoneGap.Commands</strong>. 另外我们还必须继承 PhoneGap 运行库的 BaseCommand 类,以便我们可以在 JavaScript 中调用到该类,只需要将类名后增加 <strong>: BaseCommand</strong> 即可。</p>    <p>接下来,在SendSMS类中我们需要一个方法来处理短信发送的代码,我们创建一个 <strong>send</strong> 方法,因为需要使用 SmsCompose 任务,因此需要引入 <strong>using Microsoft.Phone.Tasks</strong> ,代码如下:</p>    <pre class="brush:c#; toolbar: true; auto-links: false;">using Microsoft.Phone.Tasks;  namespace WP7GapClassLib.PhoneGap.Commands {     public class SendSMS : BaseCommand     {         public void send(string args)         {             SmsComposeTask smsTask = new SmsComposeTask();             smsTask.To = "(678) 555-1212”;             smsTask.Body = "Hello open-open.com";             smsTask.Show();         }     } }</pre>    <p></p>    <p>为了简单,接收者和短信内容我们写死了。</p>    <p>下一步就是如何在 JavaScript 中调用到这个 <strong>send</strong> 方法,下面是 JavaScript 的代码:这是存放在项目中的一个 js 文件:</p>    <pre class="brush:js; toolbar: true; auto-links: false;">function SMSComposer(){         this.resultCallback = null; }  SMSComposer.prototype.showSMSComposer = function(toRecipients, body) {     var args = {};          if(toRecipients)                 args.toRecipients = toRecipients;          if(body)         args.body = body;      PhoneGap.exec(null, null, "SendSMS", "send", args);  }  PhoneGap.addConstructor(function () {     if (!window.plugins) {         window.plugins = {};     }     window.plugins.smsComposer = new SMSComposer();   } );</pre>    <p></p>    <p>好了,现在可以忘记你的 C# 代码了。</p>    <p>接下来我们只需要在页面中通过     <script> 标签引入刚定义的 js 文件,并调用如下方法:</p>     <p><strong>window.plugins.smsComposer.showSMSComposer(recipients, message)</strong> </p>     <p>该方法接收一到多个号码和一个短信内容的参数。</p>     <p><a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-31-52-metablogapi/4846.ss1_5F00_2.png" rel="nofollow"><img title="ss1" alt="PhoneGap的Windows Phone7技巧: 编写PhoneGap插件用来发送短信" src="https://simg.open-open.com/show/f960b919893b858ddf0bae6157d3d71a.png" height="389" width="235" /></a></p>     <p>最后我们还需要对 C# 代码进行处理让它接收这个 JSON 格式的 args 参数,因此需要使用 .NET 的反序列化库进行处理,下面是具体的代码:</p>     <pre class="brush:c#; toolbar: true; auto-links: false;">using Microsoft.Phone.Tasks; using System.Runtime.Serialization;  namespace WP7GapClassLib.PhoneGap.Commands {     public class sendSMSargs     {         [DataMember]         public string toRecipients;          [DataMember]         public string body;      }      public class SendSMS : BaseCommand     {         public void send(string args)         {             sendSMSargs myargs = JSON.JsonHelper.Deserialize<sendsmsargs>(args);                         SmsComposeTask smsTask = new SmsComposeTask();             smsTask.To = myargs.toRecipients;             smsTask.Body = myargs.body;             smsTask.Show();                                     this.DispatchCommandResult();         }     } }</pre>    <p></p>     <p>如果你需要在 Windows Phone 7 项目中使用该插件,你只需要一个 C# 类,并在 JavaScript 中调用 <strong>PhoneGap.exec</strong> 即可. </p>     <p>本文译自:<a target="_blank" href="http://blogs.msdn.com/b/glengordon/archive/2011/12/02/phonegap-on-wp7-tip-3-sending-sms-and-intro-to-plugins.aspx" rel="nofollow">msdn</a></p>   </p> </p> </p> </p> </p>                      </script> </p>