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

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

结语

  • 现在随着短视频,抖音,快手的流行NDK模块开发也显得越发重要,需要这块人才的企业也越来越多,随之学习这块的人也变多了,音视频的开发,往往是比较难的,而这个比较难的技术就是NDK里面的技术。
  • 音视频/高清大图片/人工智能/直播/抖音等等这年与用户最紧密,与我们生活最相关的技术一直都在寻找最终的技术落地平台,以前是windows系统,而现在则是移动系统了,移动系统中又是以Android占比绝大部分为前提,所以AndroidNDK技术已经是我们必备技能了。
  • 要学习好NDK,其中的关于C/C++,jni,Linux基础都是需要学习的,除此之外,音视频的编解码技术,流媒体协议,ffmpeg这些都是音视频开发必备技能,而且
  • OpenCV/OpenGl/这些又是图像处理必备知识,下面这些我都是当年自己搜集的资料和做的一些图,因为当年我就感觉视频这块会是一个大的趋势。所以提前做了一些准备。现在拿出来分享给大家。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

所以AndroidNDK技术已经是我们必备技能了。

  • 要学习好NDK,其中的关于C/C++,jni,Linux基础都是需要学习的,除此之外,音视频的编解码技术,流媒体协议,ffmpeg这些都是音视频开发必备技能,而且
  • OpenCV/OpenGl/这些又是图像处理必备知识,下面这些我都是当年自己搜集的资料和做的一些图,因为当年我就感觉视频这块会是一个大的趋势。所以提前做了一些准备。现在拿出来分享给大家。

[外链图片转存中…(img-2MOIYUX5-1713401949868)]

[外链图片转存中…(img-CPkqyA2Q-1713401949869)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐