PhoneGap插件编写

PhoneGap提供了文件读写的Api,但没有提供列出文件清单的功能。我们编写一个名为 DirectoryListingPlugin 的插件来实现列表SDCARD上文件的功能吧。

2.创建一个Android工程

如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.包含PhoneGap依赖

  • 下载PhoneGap并解压

  • 在工程根目录新建目录/libs

  • 拷贝 phonegap.jar 到 /libs

注:由于是写插件,所以只有phonegap.jar就够了。要建立完整的PhoneGap应用,可参考http://www.phonegap.com/start/#android

4.实现插件类

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

代码:

[html]

/**

  1. * Example of Android PhoneGap Plugin

  2. */

  3. package com.trial.phonegap.plugin.directorylisting;

  4. import java.io.File;

  5. import org.json.JSONArray;

  6. import org.json.JSONException;

  7. import org.json.JSONObject;

  8. import android.util.Log;

  9. import com.phonegap.api.Plugin;

  10. import com.phonegap.api.PluginResult;

  11. import com.phonegap.api.PluginResult.Status;

  12. /**

  13. * PhoneGap plugin which can be involved in following manner from javascript

  14. * <p>

  15. * result example -

  16. * {“filename”:“/sdcard”,“isdir”:true,“children”:[{“filename”:“a.txt”

  17. * ,“isdir”:false},{…}]}

  18. * </p>

  19. *

  20. * <pre>

  21. * {@code

  22. * successCallback = function(result){

  23. *     //result is a json

  24. *

  25. * }

  26. * failureCallback = function(error){

  27. *     //error is error message

  28. * }

  29. *

  30. * DirectoryListing.list(“/sdcard”,

  31. *        successCallback

  32. *        failureCallback);

  33. *

  34. * }

  35. * </pre>

  36. *

  37. * @author Rohit Ghatol

  38. *

  39. */

  40. public class DirectoryListPlugin extends Plugin {

  41. /** List Action */

  42. public static final String ACTION = “list”;

  43. /*

  44. * (non-Javadoc)

  45. *

  46. * @see com.phonegap.api.Plugin#execute(java.lang.String,

  47. * org.json.JSONArray, java.lang.String)

  48. */

  49. @Override

  50. public PluginResult execute(String action, JSONArray data, String callbackId) {

  51. Log.d(“DirectoryListPlugin”, “Plugin Called”);

  52. PluginResult result = null;

  53. if (ACTION.equals(action)) {

  54. try {

  55. String fileName = data.getString(0);

  56. JSONObject fileInfo = getDirectoryListing(new File(fileName));

  57. Log

  58. .d(“DirectoryListPlugin”, "Returning "

  59. + fileInfo.toString());

  60. result = new PluginResult(Status.OK, fileInfo);

  61. } catch (JSONException jsonEx) {

  62. Log.d(“DirectoryListPlugin”, "Got JSON Exception "

  63. + jsonEx.getMessage());

  64. result = new PluginResult(Status.JSON_EXCEPTION);

  65. }

  66. } else {

  67. result = new PluginResult(Status.INVALID_ACTION);

  68. Log.d(“DirectoryListPlugin”, "Invalid action : " + action

  69. + " passed");

  70. }

  71. return result;

  72. }

  73. /**

  74. * Gets the Directory listing for file, in JSON format

  75. *

  76. * @param file

  77. *            The file for which we want to do directory listing

  78. * @return JSONObject representation of directory list. e.g

  79. *         {“filename”:“/sdcard”

  80. *         ,“isdir”:true,“children”:[{“filename”:“a.txt”

  81. *         ,“isdir”:false},{…}]}

  82. * @throws JSONException

  83. */

  84. private JSONObject getDirectoryListing(File file) throws JSONException {

  85. JSONObject fileInfo = new JSONObject();

  86. fileInfo.put(“filename”, file.getName());

  87. fileInfo.put(“isdir”, file.isDirectory());

  88. if (file.isDirectory()) {

  89. JSONArray children = new JSONArray();

  90. fileInfo.put(“children”, children);

  91. if (null != file.listFiles()) {

  92. for (File child : file.listFiles()) {

  93. children.put(getDirectoryListing(child));

  94. }

  95. }

  96. }

  97. return fileInfo;

  98. }

  99. }

5.将插件类导出成jar 包

Eclipse中如下操作:

  • 在要生成jar的项目上右击,选择菜单上的Export(导出)

  • 导出类型选择Jar File

  • 选择或者输入生成路径

  • 选择要导出的类

我们导出成directorylist.jar

6.实现JavaScript插件

  • 创建一个名为DirectoryListing的类

  • 创建一个成员函数list()

  • 在成员函数中调用PhoneGap.exec(<>,<>,<>,<>,<>);

  • 将js文件保存为directorylisting.js

代码:

[javascript]

/**

  1. *

  2. * @return Object literal singleton instance of DirectoryListing

  3. */

  4. var DirectoryListing = {

  5. /**

  6. * @param directory The directory for which we want the listing

  7. * @param successCallback The callback which will be called when directory listing is successful

  8. * @param failureCallback The callback which will be called when directory listing encouters an error

  9. */

  10. list: function(directory,successCallback, failureCallback) {

  11. return PhoneGap.exec(successCallback,        //Success callback from the plugin

  12. failureCallback,        //Error callback from the plugin

  13. ‘DirectoryListPlugin’,  //Tell PhoneGap to run “DirectoryListingPlugin” Plugin

  14. ‘list’,                 //Tell plugin, which action we want to perform

  15. [directory]);           //Passing list of args to the plugin

写在最后

本次我的分享也接近尾声了,感谢你们在百忙中花上一下午来这里聆听我的宣讲,希望在接下来的日子,我们共同成长,一起进步!!!

最后放上一个大概的Android学习方向及思路(详细的内容太多了~),提供给大家:

对于程序员来说,要学习的知识内容、技术有太多太多,这里就先放上一部分,其他的内容有机会在后面的文章向大家呈现出来,不过我自己所有的学习资料都整理成了一个文档,一直在不断学习,希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!

Android架构师之路很漫长,一起共勉吧!

如果你觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。


《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
呈现出来,不过我自己所有的学习资料都整理成了一个文档,一直在不断学习,希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!

Android架构师之路很漫长,一起共勉吧!

如果你觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。

[外链图片转存中…(img-8b1z1Cce-1715743809045)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值