Skip to content

Instantly share code, notes, and snippets.

@davejohnson
Created September 3, 2010 22:21
Show Gist options
  • Save davejohnson/564658 to your computer and use it in GitHub Desktop.
Save davejohnson/564658 to your computer and use it in GitHub Desktop.
phonegap-android-plugin-java-example
package com.example;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.json.JSONArray;
import org.json.JSONException;
import android.content.Context;
import android.webkit.WebView;
import com.phonegap.api.Command;
import com.phonegap.api.CommandResult;
public final class URLCache implements Command {
private Context ctx;
public void setContext(Context ctx) {
this.ctx = ctx;
}
public void setView(WebView arg0) {
// TODO Auto-generated method stub
}
public CommandResult execute(String action, JSONArray args) {
CommandResult.Status status = CommandResult.Status.OK;
String result = "";
String uri = null;
String fileName = "";
try {
uri = args.getString(0);
fileName = md5(uri);
} catch (JSONException e1) {
status = CommandResult.Status.JSONEXCEPTION;
result = "{ message: 'JSONException', status: "+status.ordinal()+" }";
}
if (uri != null && action.equals("getCachedPathForURI") && args.length() == 1)
{
// First check if the file exists already
String fileDir = ctx.getFilesDir().getAbsolutePath();
String filePath = fileDir + "/" + fileName;
File f = new File(filePath);
if (f.exists()) {
result = "{ file: '"+filePath+"', status: 0 }";
} else {
URL u;
InputStream is = null;
DataInputStream dis;
FileOutputStream out = null;
byte[] buffer = new byte[1024];
int length = -1;
try {
u = new URL(uri);
is = u.openStream(); // throws an IOException
dis = new DataInputStream(new BufferedInputStream(is));
out = ctx.openFileOutput(fileName, Context.MODE_PRIVATE);
while ((length = dis.read(buffer)) != -1) {
out.write(buffer, 0, length);
}
out.flush();
result = "{ file: '"+fileName+"', status: 0 }";
} catch (MalformedURLException e) {
status = CommandResult.Status.MALFORMEDURLEXCEPTION;
result = "{ message: 'MalformedURLException', status: "+status.ordinal()+" }";
} catch (IOException e) {
status = CommandResult.Status.IOEXCEPTION;
result = "{ message: 'IOException', status: "+status.ordinal()+" }";
} finally {
try {
is.close();
out.close();
} catch (IOException e) {
status = CommandResult.Status.IOEXCEPTION;
result = "{ message: 'IOException', status: "+status.ordinal()+" }";
}
}
}
} else {
status = CommandResult.Status.INVALIDACTION;
result = "{ message: 'InvalidAction', status: "+status.ordinal()+" }";
}
return new CommandResult(status, result);
}
public String md5(String s) {
try {
// Create MD5 Hash
MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
digest.update(s.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
for (int i=0; i<messageDigest.length; i++)
hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment