PhoneGap提供了文件读写的Api,但没有提供列出文件清单的功能。我们编写一个名为 DirectoryListingPlugin 的插件来实现列表SDCARD上文件的功能吧。
2.创建一个Android工程
如下图所示:
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(<>,<>,<>,<>,<>);
-
将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
写在最后
本次我的分享也接近尾声了,感谢你们在百忙中花上一下午来这里聆听我的宣讲,希望在接下来的日子,我们共同成长,一起进步!!!
最后放上一个大概的Android学习方向及思路(详细的内容太多了~),提供给大家:
对于程序员来说,要学习的知识内容、技术有太多太多,这里就先放上一部分,其他的内容有机会在后面的文章向大家呈现出来,不过我自己所有的学习资料都整理成了一个文档,一直在不断学习,希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!
Android架构师之路很漫长,一起共勉吧!
如果你觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
呈现出来,不过我自己所有的学习资料都整理成了一个文档,一直在不断学习,希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!
Android架构师之路很漫长,一起共勉吧!
如果你觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。
[外链图片转存中…(img-8b1z1Cce-1715743809045)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!