Upgrade to Pro — share decks privately, control downloads, hide ads and more …

关于PhoneGap你应该知道的12件事 (12 things you should know...

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for dong dong
March 02, 2012

关于PhoneGap你应该知道的12件事 (12 things you should know about PhoneGap)

在w3ctech上的演讲稿,介绍了PhoneGap的基本概念,用法,打包,插件的开发,以Android为例介绍了PhoneGap的内部机制,以及如何调试PhoneGap应用。

Avatar for dong

dong

March 02, 2012
Tweet

More Decks by dong

Other Decks in Technology

Transcript

  1. /BUJWF8FC7JFX 1IPOF(BQ1MVHJOT .PCJMF04  /BUJWF"1* )BSEXBSF  Ԯۋఖ ๭ྙԩ৘ ຩ઎

    l  8FC"QQ    +BWB4DSJQU  $44  )5.-  FFI 浏览器 OS API OS API 1IPOF(BQ"QQ
  2. 1IPOF(BQࡏܒ  .PCJMF04 8FC"QQ )5.- +BWB4DSJQU $44 /BUJWF8FC7JFX 8FC7JFXa6*8FC7JFXl 

    1IPOF(BQ1MVHJOT ജཞ๨ ᄎ׮Ԯۋఖ ᆷଲᆌ ഡСྐ༏ (14 ๙ᆩ ຩ઎ሑ෿ l קᇅQMVHJO HTML5 API PhoneGap JS API OS API OS API PhoneGap Native API
  3. public class CirclesActivity extends DroidGap { @Override public void onCreate(Bundle

    savedInstanceState) { super.onCreate(savedInstanceState); super.loadUrl("file:///android_asset/ www/circles.html"); } } /BUJWF8SBQQFSXJUI1IPOF(BQ Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
  4. public class callsPGPlugin extends Plugin { // List Actions public

    static nal String ACTION="list"; @Override public PluginResult execute(String action, JSONArray data, String callbackId) { PluginResult result=null; if(ACTION.equals(action)){ CallLogAI callLogAI = new CallLogAI(ctx); JSONObject callsHistory=callLogAI.fetchCallLogs(null); Log.d("RESULT=", callsHistory.toString()); result=new PluginResult(Status.OK,callsHistory); }else{ result=new PluginResult(Status.INVALID_ACTION); Log.d("CallsPlugin","Invalidate action:" + action); } return result; } } Javaקᇅplugin Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
  5. ᇿҨplugin <?xml version="1.0" encoding="UTF-8"?> <plugins> <plugin name="App" value="com.phonegap.App"/> <plugin name="Geolocation"

    value="com.phonegap.GeoBroker"/> <plugin name="Device" value="com.phonegap.Device"/> …… <plugin name="Temperature" value="com.phonegap.TempListener"/> <plugin name="FileTransfer" value="com.phonegap.FileTransfer"/> <plugin name="Capture" value="com.phonegap.Capture"/> <plugin name="CallsHistoryPlugin" value="com.mark.phonegap.plugin.callsPGPlugin" /> </plugins> Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
  6. window.plugins.callsListing.list( function(r){printResult(r)}, function(e){console.log(e)} ); CallsListing.prototype.list=function(success Callback,failureCallback){ return PhoneGap.exec(successCallback, failureCallback, 'CallsHistoryPlugin',

    'list',['test’]); }; public class callsPGPlugin extends Plugin { // List Actions public static nal String ACTION="list"; @Override public PluginResult execute(String action, JSONArray data, String callbackId) { <plugin name="CallsHistoryPlugin" value="com.mark.phonegap.plugin.callsPGPlu gin" />
  7. CallsListing.prototype.list=function(successCallback,fai lureCallback){ return PhoneGap.exec(successCallback, failureCallback, 'CallsHistoryPlugin', 'list',['test’]); }; PhoneGap.exec =

    function(success, fail, service, action, args) { … var r = prompt(JSON.stringify(args), "gap:"+JSON.stringify([service, action, callbackId, true])); … +BWBTDSJQU Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
  8. Droidgap.java public boolean onJsPrompt(WebView view, String url, String message, String

    defaultValue, JsPromptResult result) { …… String r = pluginManager.exec(service, action, callbackId, message, async); …… } Pluginmanager.java public String exec( nal String service, nal String action, nal String callbackId, nal String jsonArgs, nal boolean async) { …… cr = plugin.execute(action, args, callbackId); ctx.sendJavascript(cr.toErrorCallbackString(callbackId)); …… } +BWB