PhoneGap 插件编写
3.包含 PhoneGap 依赖
下载 PhoneGap 并解压
在工程根目录新建目录/libs
拷贝?phonegap.jar?到?/libs
注:由于是写插件,所以只有 phonegap.jar 就够了。要建立完整的 PhoneGap 应用,可参考http://www.phonegap.com/start/#android?
4.实现插件类
代码:
[html]
/**??
?*?Example?of?Android?PhoneGap?Plugin??
?*/??
package?com.trial.phonegap.plugin.directorylisting;??
import?java.io.File;??
import?org.json.JSONArray;??
import?org.json.JSONException;??
import?org.json.JSONObject;??
import?android.util.Log;??
import?com.phonegap.api.Plugin;??
import?com.phonegap.api.PluginResult;??
import?com.phonegap.api.PluginResult.Status;??
/**??
?*?PhoneGap?plugin?which?can?be?involved?in?following?manner?from?javascript??
?*?<p>??
?*?result?example?-??
?*?{"filename":"/sdcard","isdir":true,"children":[{"filename":"a.txt"??
?*?,"isdir":false},{..}]}??
?*?</p>??
?*???
?*?<pre>??
?*?{@code??
?*?successCallback?=?function(result){??
?*?????//result?is?a?json??
?*????
?*?}??
?*?failureCallback?=?function(error){??
?*?????//error?is?error?message??
?*?}??
?*???
?*?DirectoryListing.list("/sdcard",??
?*????????successCallback??
?*????????failureCallback);??
?*???????????????????????????????????
?*?}??
?*?</pre>??
?*???
?*?@author?Rohit?Ghatol??
?*???
?*/??
public?class?DirectoryListPlugin?extends?Plugin?{??
????/**?List?Action?*/??
????public?static?final?String?ACTION?=?"list";??
????/*??
?????*?(non-Javadoc)??
?????*???
?????*?@see?com.phonegap.api.Plugin#execute(java.lang.String,??
?????*?org.json.JSONArray,?java.lang.String)??
?????*/??
????@Override??
????public?PluginResult?execute(String?action,?JSONArray?data,?String?callbackId)?{??
????????Log.d("DirectoryListPlugin",?"Plugin?Called");??
????????PluginResult?result?=?null;??
????????if?(ACTION.equals(action))?{??
????????????try?{??
????????????????String?fileName?=?data.getString(0);??
????????????????JSONObject?fileInfo?=?getDirectoryListing(new?File(fileName));??
????????????????Log??
????????????????????????.d("DirectoryListPlugin",?"Returning?"??
????????????????????????????????+?fileInfo.toString());??
????????????????result?=?new?PluginResult(Status.OK,?fileInfo);??
????????????}?catch?(JSONException?jsonEx)?{??
????????????????Log.d("DirectoryListPlugin",?"Got?JSON?Exception?"??
????????????????????????+?jsonEx.getMessage());??
????????????????result?=?new?PluginResult(Status.JSON_EXCEPTION);??
????????????}??
????????}?else?{??
????????????result?=?new?PluginResult(Status.INVALID_ACTION);??
????????????Log.d("DirectoryListPlugin",?"Invalid?action?:?"?+?action??
????????????????????+?"?passed");??
????????}??
????????return?result;??
????}??
????/**??
?????*?Gets?the?Directory?listing?for?file,?in?JSON?format??
?????*???
?????*?@param?file??
?????*????????????The?file?for?which?we?want?to?do?directory?listing??
?????*?@return?JSONObject?representation?of?directory?list.?e.g??
?????*?????????{"filename":"/sdcard"??
?????*?????????,"isdir":true,"children":[{"filename":"a.txt"??
?????*?????????,"isdir":false},{..}]}??
?????*?@throws?JSONException??
?????*/??
????private?JSONObject?getDirectoryListing(File?file)?throws?JSONException?{??
????????JSONObject?fileInfo?=?new?JSONObject();??
????????fileInfo.put("filename",?file.getName());??
????????fileInfo.put("isdir",?file.isDirectory());??
????????if?(file.isDirectory())?{??
????????????JSONArray?children?=?new?JSONArray();??
????????????fileInfo.put("children",?children);??
????????????if?(null?!=?file.listFiles())?{??
????????????????for?(File?child?:?file.listFiles())?{??
????????????????????children.put(getDirectoryListing(child));??
????????????????}??
????????????}??
????????}??
????????return?fileInfo;??
????}??
}??
5.将插件类导出成 jar 包
Eclipse 中如下操作:
在要生成 jar 的项目上右击,选择菜单上的 Export(导出)
导出类型选择 Jar File
选择或者输入生成路径
选择要导出的类
我们导出成 directorylist.jar
6.实现 JavaScript 插件
创建一个名为 DirectoryListing 的类
创建一个成员函数 list()
在成员函数中调用 PhoneGap.exec(<<successCallback>>,<<failureCallback>>,<<Plugin Name>>,<<Action Name>>,<<Arguments Array>>);
将 js 文件保存为 directorylisting.js
代码:
[javascript]
/**?
?*???
?*?@return?Object?literal?singleton?instance?of?DirectoryListing?
?*/??
var?DirectoryListing?=?{???
/**?
?*?@param?directory?The?directory?for?which?we?want?the?listing?
?*?@param?successCallback?The?callback?which?will?be?called?when?directory?listing?is?successful?
?*?@param?failureCallback?The?callback?which?will?be?called?when?directory?listing?encouters?an?error?
?*/??
????list:?function(directory,successCallback,?failureCallback)?{??
????????return?PhoneGap.exec(successCallback,????????//Success?callback?from?the?plugin ??
?????????????????????????????failureCallback,????????//Error?callback?from?the?plugin ??
?????????????????????????????'DirectoryListPlugin',??//Tell?PhoneGap?to?run?"DirectoryListingPlugin"?Plugin ??
?????????????????????????????'list',?????????????????//Tell?plugin,?which?action?we?want?to?perform ??
?????????????????????????????[directory]);???????????//Passing?list?of?args?to?the?plugin ??
????}??
};??
三、测试
====
1.创建一个 PhoneGap 应用?http://www.phonegap.com/start/#android
2.将?directorylisting.jar 加入工程依赖
3.将 directorylisting.js 放入到 /assets/www 目录下。
4.在?/res/xml/plugins.xml 文件中添加?
[html]
<plugin?name="DirectoryListPlugin"?value="com.trial.phonegap.plugin.directorylisting.DirectoryListPlugin"?/>??
评论