diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 9e42bbca7c7c93217741d46abf809f887d7c6741..400684530c1f21f30a682f725c9f109656ec9a8c 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -8,4 +8,6 @@ + + diff --git a/src/main/java/org/qpython/qsl4a/QPyScriptService.java b/src/main/java/org/qpython/qsl4a/QPyScriptService.java index 8122ba0300053c72070408ce01237babe8b1fc32..ffc95b5ce06bbbe139ed19ce215b650c10a152ee 100644 --- a/src/main/java/org/qpython/qsl4a/QPyScriptService.java +++ b/src/main/java/org/qpython/qsl4a/QPyScriptService.java @@ -10,6 +10,7 @@ import android.os.IBinder; import android.util.Log; import org.qpython.qsl4a.qsl4a.AndroidProxy; +import org.qpython.qsl4a.qsl4a.LogUtil; import org.qpython.qsl4a.qsl4a.interpreter.InterpreterConfiguration; import org.qpython.qsl4a.qsl4a.jsonrpc.RpcReceiverManager; import org.qpython.qsl4a.qsl4a.util.SPFUtils; @@ -62,6 +63,7 @@ public class QPyScriptService extends Service { @Override public void onDestroy() { Log.d(TAG, "onDestroy"); + LogUtil.e("doWork444444"); if (mProxy != null) { mProxy.shutdown(); @@ -91,6 +93,7 @@ public class QPyScriptService extends Service { @Override public void onCreate() { Log.d(TAG, "onCreate"); + LogUtil.e("doWork3333333"); super.onCreate(); // clear before run /*File logFile = new File( Environment.getExternalStorageDirectory()+"/"+CONF.BASE_PATH+"/"+scriptName.substring(scriptName.lastIndexOf("/")+1)+".log" ); diff --git a/src/main/java/org/qpython/qsl4a/QSL4APP.java b/src/main/java/org/qpython/qsl4a/QSL4APP.java index 2063e4a01d8fc291dd63a298906a54de7b000f3d..49298b450a0c840cf62c1677aeb6d6d7f272ca66 100644 --- a/src/main/java/org/qpython/qsl4a/QSL4APP.java +++ b/src/main/java/org/qpython/qsl4a/QSL4APP.java @@ -42,13 +42,12 @@ public class QSL4APP extends MyApp implements InterpreterConfiguration.Configura @Override public void onCreate() { super.onCreate(); + } + public void initConfiguration() { mConfiguration = new InterpreterConfiguration(this); mConfiguration.registerObserver(this); mConfiguration.startDiscovering(InterpreterConstants.MIME + QSL4AScript.getFileExtension(this)); - - //注册crashHandler类 - int xq = 30; } public FutureActivityTaskExecutor getTaskExecutor() { diff --git a/src/main/java/org/qpython/qsl4a/qsl4a/FileUtils.java b/src/main/java/org/qpython/qsl4a/qsl4a/FileUtils.java index bf59c87eef8d9bc7a326277efe299c0673b52867..1f9cbf5cf1f954cad23dfd78ffcc3e94b849ab68 100644 --- a/src/main/java/org/qpython/qsl4a/qsl4a/FileUtils.java +++ b/src/main/java/org/qpython/qsl4a/qsl4a/FileUtils.java @@ -48,6 +48,18 @@ public class FileUtils { || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state); } + public static String getRootPath(Context context){ + return com.quseit.util.FileUtils.getQyPath(context) + "/sl4a/"; + } + + public static String getScriptsRootPath(Context context){ + return getRootPath(context) + "scripts/"; + } + + public static String getBasePath(Context context){ + return "file://" + getScriptsRootPath(context); + } + public static String getFileContents(String filename) { File scriptFile = new File( filename ); @@ -184,15 +196,16 @@ public class FileUtils { return true; } - public static File getExternalDownload() { - try { - Class c = Class.forName("android.os.Environment"); - Method m = c.getDeclaredMethod("getExternalStoragePublicDirectory", String.class); - String download = c.getDeclaredField("DIRECTORY_DOWNLOADS").get(null).toString(); - return (File) m.invoke(null, download); - } catch (Exception e) { - return new File(Environment.getExternalStorageDirectory(), "Download"); - } + public static File getExternalDownload(Context context) { +// try { +// Class c = Class.forName("android.os.Environment"); +// Method m = c.getDeclaredMethod("getExternalStoragePublicDirectory", String.class); +// String download = c.getDeclaredField("DIRECTORY_DOWNLOADS").get(null).toString(); +// return (File) m.invoke(null, download); +// } catch (Exception e) { +// return new File(Environment.getExternalStorageDirectory(), "Download"); +// } + return context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS); } public static boolean rename(File file, String name) { @@ -226,4 +239,4 @@ public class FileUtils { return builder.toString(); } -} +} \ No newline at end of file diff --git a/src/main/java/org/qpython/qsl4a/qsl4a/Process.java b/src/main/java/org/qpython/qsl4a/qsl4a/Process.java index 67becf3a08590f89581f9801f8d6415045af66e2..68ab1076a7cec501f0bf4c103a01bd3723bd7618 100644 --- a/src/main/java/org/qpython/qsl4a/qsl4a/Process.java +++ b/src/main/java/org/qpython/qsl4a/qsl4a/Process.java @@ -16,6 +16,8 @@ package org.qpython.qsl4a.qsl4a; +import android.content.Context; + import org.qpython.qsl4a.codec.StreamGobbler; import org.qpython.qsl4a.qsl4a.interpreter.InterpreterConstants; @@ -106,7 +108,7 @@ public class Process { return mIn; } - public void start(final Runnable shutdownHook) { + public void start(Context context, final Runnable shutdownHook) { if (isAlive()) { throw new RuntimeException("Attempted to start process that is already running."); } @@ -117,17 +119,19 @@ public class Process { int[] pid = new int[1]; String[] argumentsArray = mArguments.toArray(new String[mArguments.size()]); - mLog = new File(String.format("%s/%s.log", InterpreterConstants.SDCARD_SL4A_ROOT, getName())); +// mLog = new File(String.format("%s/%s.log", InterpreterConstants.SDCARD_SL4A_ROOT, getName())); + mLog = new File(String.format("%s/%s.log", FileUtils.getRootPath(context.getApplicationContext()), getName())); mFd = Exec.createSubprocess(binaryPath, argumentsArray, getEnvironmentArray(), - getWorkingDirectory(), pid); + getWorkingDirectory(context), pid); mPid.set(pid[0]); mOut = new FileOutputStream(mFd); mIn = new StreamGobbler(new FileInputStream(mFd), mLog, DEFAULT_BUFFER_SIZE); mStartTime = System.currentTimeMillis(); new Thread(new Runnable() { + @Override public void run() { int result = Exec.waitFor(mPid.get()); mEndTime = System.currentTimeMillis(); @@ -199,7 +203,7 @@ public class Process { mName = name; } - public String getWorkingDirectory() { + public String getWorkingDirectory(Context context) { return null; } -} +} \ No newline at end of file diff --git a/src/main/java/org/qpython/qsl4a/qsl4a/ScriptLauncher.java b/src/main/java/org/qpython/qsl4a/qsl4a/ScriptLauncher.java index 4bb294b27300fe1807fe0893b4720f0902b0f7b8..45dd43c84a34d8d0b87d32a6b84736a622543342 100644 --- a/src/main/java/org/qpython/qsl4a/qsl4a/ScriptLauncher.java +++ b/src/main/java/org/qpython/qsl4a/qsl4a/ScriptLauncher.java @@ -17,6 +17,7 @@ package org.qpython.qsl4a.qsl4a; import android.app.Service; +import android.content.Context; import android.content.Intent; @@ -59,7 +60,7 @@ public class ScriptLauncher { return task; } - public static InterpreterProcess launchInterpreter(final AndroidProxy proxy, Intent intent, + public static InterpreterProcess launchInterpreter(Context context, final AndroidProxy proxy, Intent intent, InterpreterConfiguration config, Runnable shutdownHook) { Interpreter interpreter; String interpreterName; @@ -67,33 +68,33 @@ public class ScriptLauncher { interpreter = config.getInterpreterByName(interpreterName); InterpreterProcess process = new InterpreterProcess(interpreter, proxy); if (shutdownHook == null) { - process.start(new Runnable() { + process.start(context,new Runnable() { @Override public void run() { proxy.shutdown(); } }); } else { - process.start(shutdownHook); + process.start(context,shutdownHook); } return process; } - public static ScriptProcess launchScript(File script, InterpreterConfiguration configuration, + public static ScriptProcess launchScript(Context context,File script, InterpreterConfiguration configuration, final AndroidProxy proxy, Runnable shutdownHook) { if (!script.exists()) { throw new RuntimeException("No such script to launch."); } ScriptProcess process = new ScriptProcess(script, configuration, proxy); if (shutdownHook == null) { - process.start(new Runnable() { + process.start(context,new Runnable() { @Override public void run() { proxy.shutdown(); } }); } else { - process.start(shutdownHook); + process.start(context,shutdownHook); } return process; } diff --git a/src/main/java/org/qpython/qsl4a/qsl4a/ScriptStorageAdapter.java b/src/main/java/org/qpython/qsl4a/qsl4a/ScriptStorageAdapter.java index b9919a490c54b102e42029be372693f4f685138e..527a20f6882777e3cd97dff33c75fcb63151c755 100644 --- a/src/main/java/org/qpython/qsl4a/qsl4a/ScriptStorageAdapter.java +++ b/src/main/java/org/qpython/qsl4a/qsl4a/ScriptStorageAdapter.java @@ -16,6 +16,10 @@ package org.qpython.qsl4a.qsl4a; +import android.content.Context; + +import com.quseit.util.FileUtils; + import org.qpython.qsl4a.qsl4a.interpreter.Interpreter; import org.qpython.qsl4a.qsl4a.interpreter.InterpreterConfiguration; import org.qpython.qsl4a.qsl4a.interpreter.InterpreterConstants; @@ -46,9 +50,9 @@ public class ScriptStorageAdapter { /** * Writes data to the script by name and overwrites any existing data. */ - public static void writeScript(File script, String data) { + public static void writeScript(Context context, File script, String data) { if (script.getParent() == null) { - script = new File(InterpreterConstants.SCRIPTS_ROOT, script.getPath()); + script = new File(FileUtils.getScriptsRootPath(context), script.getPath()); } try { FileWriter stream = new FileWriter(script, false /* overwrite */); @@ -63,9 +67,9 @@ public class ScriptStorageAdapter { /** * Returns a list of all available script {@link File}s. */ - public static List listAllScripts(File dir) { + public static List listAllScripts(Context context,File dir) { if (dir == null) { - dir = new File(InterpreterConstants.SCRIPTS_ROOT); + dir = new File(FileUtils.getScriptsRootPath(context)); } if (dir.exists()) { List scripts = Arrays.asList(dir.listFiles()); @@ -89,10 +93,10 @@ public class ScriptStorageAdapter { * Returns a list of script {@link File}s from the given folder for which there is an interpreter * installed. */ - public static List listExecutableScripts(File directory, InterpreterConfiguration config) { + public static List listExecutableScripts(Context context,File directory, InterpreterConfiguration config) { // NOTE(damonkohler): Creating a LinkedList here is necessary in order to be able to filter it // later. - List scripts = new LinkedList(listAllScripts(directory)); + List scripts = new LinkedList<>(listAllScripts(context,directory)); // Filter out any files that don't have interpreters installed. for (Iterator it = scripts.iterator(); it.hasNext();) { File script = it.next(); @@ -111,18 +115,18 @@ public class ScriptStorageAdapter { * Returns a list of all (including subfolders) script {@link File}s for which there is an * interpreter installed. */ - public static List listExecutableScriptsRecursively(File directory, + public static List listExecutableScriptsRecursively(Context context,File directory, InterpreterConfiguration config) { // NOTE(damonkohler): Creating a LinkedList here is necessary in order to be able to filter it // later. List scripts = new LinkedList(); - List files = listAllScripts(directory); + List files = listAllScripts(context,directory); // Filter out any files that don't have interpreters installed. for (Iterator it = files.iterator(); it.hasNext();) { File file = it.next(); if (file.isDirectory()) { - scripts.addAll(listExecutableScriptsRecursively(file, config)); + scripts.addAll(listExecutableScriptsRecursively(context,file, config)); } Interpreter interpreter = config.getInterpreterForScript(file.getName()); if (interpreter != null && interpreter.isInstalled()) { diff --git a/src/main/java/org/qpython/qsl4a/qsl4a/facade/AndroidFacade.java b/src/main/java/org/qpython/qsl4a/qsl4a/facade/AndroidFacade.java index 571039d368b23b7eae9ac848aaaf2623ce87c298..c574cb6aacca96f3f9e48b1de8d2ba8c2a5f05ce 100644 --- a/src/main/java/org/qpython/qsl4a/qsl4a/facade/AndroidFacade.java +++ b/src/main/java/org/qpython/qsl4a/qsl4a/facade/AndroidFacade.java @@ -526,6 +526,7 @@ public class AndroidFacade extends RpcReceiver { @Rpc(description = "Displays a short-duration Toast notification.") public void makeToast(@RpcParameter(name = "message") final String message) { mHandler.post(new Runnable() { + @Override public void run() { Toast.makeText(mService, message, Toast.LENGTH_SHORT).show(); } @@ -726,7 +727,7 @@ public class AndroidFacade extends RpcReceiver { zone.put("offset", tz.getOffset((new Date()).getTime())); result.put("TZ", zone); result.put("SDK", android.os.Build.VERSION.SDK); - result.put("download", FileUtils.getExternalDownload().getAbsolutePath()); + result.put("download", FileUtils.getExternalDownload(mService.getApplicationContext()).getAbsolutePath()); result.put("appcache", mService.getCacheDir().getAbsolutePath()); try { StatFs fs = new StatFs("/sdcard"); diff --git a/src/main/java/org/qpython/qsl4a/qsl4a/facade/PhoneFacade.java b/src/main/java/org/qpython/qsl4a/qsl4a/facade/PhoneFacade.java index 09a5a26a362d6072c16ca0339597a7846d991c85..40fdf82a4f5142c359c67a01edbb414bffd9634a 100644 --- a/src/main/java/org/qpython/qsl4a/qsl4a/facade/PhoneFacade.java +++ b/src/main/java/org/qpython/qsl4a/qsl4a/facade/PhoneFacade.java @@ -16,6 +16,7 @@ package org.qpython.qsl4a.qsl4a.facade; +import android.Manifest; import android.app.Service; import android.content.ContentResolver; import android.content.Context; @@ -24,6 +25,7 @@ import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.Contacts.PhonesColumns; +import android.support.annotation.RequiresPermission; import android.telephony.CellLocation; import android.telephony.NeighboringCellInfo; import android.telephony.PhoneStateListener; @@ -161,6 +163,7 @@ public class PhoneFacade extends RpcReceiver { } @Rpc(description = "Returns the current cell location.") + @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public CellLocation getCellLocation() { return mTelephonyManager.getCellLocation(); } @@ -221,6 +224,7 @@ public class PhoneFacade extends RpcReceiver { } @Rpc(description = "Returns the serial number of the SIM, if applicable. Return null if it is unavailable.") + @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getSimSerialNumber() { return mTelephonyManager.getSimSerialNumber(); } @@ -246,16 +250,19 @@ public class PhoneFacade extends RpcReceiver { } @Rpc(description = "Returns the unique subscriber ID, for example, the IMSI for a GSM phone. Return null if it is unavailable.") + @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getSubscriberId() { return mTelephonyManager.getSubscriberId(); } @Rpc(description = "Retrieves the alphabetic identifier associated with the voice mail number.") + @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailAlphaTag() { return mTelephonyManager.getVoiceMailAlphaTag(); } @Rpc(description = "Returns the voice mail number. Return null if it is unavailable.") + @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailNumber() { return mTelephonyManager.getVoiceMailNumber(); } @@ -271,17 +278,19 @@ public class PhoneFacade extends RpcReceiver { } @Rpc(description = "Returns the software version number for the device, for example, the IMEI/SV for GSM phones. Return null if the software version is not available.") + @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getDeviceSoftwareVersion() { return mTelephonyManager.getDeviceSoftwareVersion(); } @Rpc(description = "Returns the phone number string for line 1, for example, the MSISDN for a GSM phone. Return null if it is unavailable.") + @RequiresPermission(Manifest.permission.READ_PHONE_NUMBERS) public String getLine1Number() { return mTelephonyManager.getLine1Number(); } - @Rpc(description = "Returns the neighboring cell information of the device.") - public List getNeighboringCellInfo() { - return mTelephonyManager.getNeighboringCellInfo(); - } +// @Rpc(description = "Returns the neighboring cell information of the device.") +// public List getNeighboringCellInfo() { +// return mTelephonyManager.getNeighboringCellInfo(); +// } } diff --git a/src/main/java/org/qpython/qsl4a/qsl4a/facade/QPyInterfaceFacade.java b/src/main/java/org/qpython/qsl4a/qsl4a/facade/QPyInterfaceFacade.java index 87bc88c8cde2746da91fc4025cd29e2004fdc669..774b6925894704952e0e12b2e78220862e078c28 100644 --- a/src/main/java/org/qpython/qsl4a/qsl4a/facade/QPyInterfaceFacade.java +++ b/src/main/java/org/qpython/qsl4a/qsl4a/facade/QPyInterfaceFacade.java @@ -1,6 +1,7 @@ package org.qpython.qsl4a.qsl4a.facade; import android.app.Service; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Environment; @@ -118,7 +119,7 @@ public class QPyInterfaceFacade extends RpcReceiver { } @Rpc(description = "Get last QPython execute log", returns = "LogUtil string") - public String getLastLog(@RpcParameter(name = "QPython script path") @RpcOptional String path) { + public String getLastLog(@RpcParameter(name = "QPython script path") @RpcOptional String path, Context context) { String content; content = FileUtils.getFileContents(path, 64); boolean isQApp = content.contains("#qpy:qpyapp"); @@ -142,7 +143,8 @@ public class QPyInterfaceFacade extends RpcReceiver { } else if (isWeb || isQApp) { //File script = new File(path); - String log = Environment.getExternalStorageDirectory()+ "/qpython/log/last.log"; +// String log = Environment.getExternalStorageDirectory()+ "/qpython/log/last.log"; + String log = com.quseit.util.FileUtils.getQyPath(context) + "/qpython/log/last.log"; File lf = new File(log); if (lf.exists()) { return "# QPython:getLastLog(ok)\n" @@ -164,4 +166,4 @@ public class QPyInterfaceFacade extends RpcReceiver { } -} +} \ No newline at end of file diff --git a/src/main/java/org/qpython/qsl4a/qsl4a/interpreter/InterpreterConstants.java b/src/main/java/org/qpython/qsl4a/qsl4a/interpreter/InterpreterConstants.java index 27b0aadc11976916609dbe10acde6bfa4f0ab86b..ebeb4c11ae1e055f7fc08bcef2dd5b6d0e2cbed9 100644 --- a/src/main/java/org/qpython/qsl4a/qsl4a/interpreter/InterpreterConstants.java +++ b/src/main/java/org/qpython/qsl4a/qsl4a/interpreter/InterpreterConstants.java @@ -18,6 +18,8 @@ package org.qpython.qsl4a.qsl4a.interpreter; import android.os.Environment; +import com.quseit.util.FileUtils; + /** * A collection of constants required for installation/removal of an interpreter. * @@ -26,16 +28,15 @@ import android.os.Environment; */ public interface InterpreterConstants { - public static final String SDCARD_ROOT = - Environment.getExternalStorageDirectory().getAbsolutePath() + "/"; +// public static final String SDCARD_ROOT = Environment.getExternalStorageDirectory().getAbsolutePath() + "/"; - public static final String SDCARD_SL4A_ROOT = SDCARD_ROOT + "sl4a/"; +// public static final String SDCARD_SL4A_ROOT = SDCARD_ROOT + "sl4a/"; - public static final String SCRIPTS_ROOT = SDCARD_SL4A_ROOT + "scripts/"; +// public static final String SCRIPTS_ROOT = SDCARD_SL4A_ROOT + "scripts/"; - public static final String SDCARD_SL4A_DOC = SDCARD_SL4A_ROOT + "doc/"; +// public static final String SDCARD_SL4A_DOC = SDCARD_SL4A_ROOT + "doc/"; - public static final String SL4A_DALVIK_CACHE_ROOT = "/dalvik-cache/"; +// public static final String SL4A_DALVIK_CACHE_ROOT = "/dalvik-cache/"; public static final String INTERPRETER_EXTRAS_ROOT = "/extras/"; diff --git a/src/main/java/org/qpython/qsl4a/qsl4a/interpreter/InterpreterProcess.java b/src/main/java/org/qpython/qsl4a/qsl4a/interpreter/InterpreterProcess.java index 4a00b5c90dcbb2763d89838c99f3637c45fffbcd..fa563d82d2938cd89340777e2b746acc52006b93 100644 --- a/src/main/java/org/qpython/qsl4a/qsl4a/interpreter/InterpreterProcess.java +++ b/src/main/java/org/qpython/qsl4a/qsl4a/interpreter/InterpreterProcess.java @@ -16,8 +16,11 @@ package org.qpython.qsl4a.qsl4a.interpreter; +import android.content.Context; + import org.qpython.qsl4a.qsl4a.Analytics; import org.qpython.qsl4a.qsl4a.AndroidProxy; +import org.qpython.qsl4a.qsl4a.FileUtils; import org.qpython.qsl4a.qsl4a.LogUtil; import org.qpython.qsl4a.qsl4a.Process; import org.qpython.qsl4a.qsl4a.SimpleServer; @@ -103,13 +106,13 @@ public class InterpreterProcess extends Process { } @Override - public void start(final Runnable shutdownHook) { + public void start(Context context, final Runnable shutdownHook) { Analytics.track(mInterpreter.getName()); // NOTE(damonkohler): String.isEmpty() doesn't work on Cupcake. if (!mCommand.equals("")) { addArgument(mCommand); } - super.start(shutdownHook); + super.start(context,shutdownHook); } @Override @@ -119,7 +122,7 @@ public class InterpreterProcess extends Process { } @Override - public String getWorkingDirectory() { - return InterpreterConstants.SDCARD_SL4A_ROOT; + public String getWorkingDirectory(Context context) { + return FileUtils.getScriptsRootPath(context); } -} +} \ No newline at end of file diff --git a/src/main/java/org/qpython/qsl4a/qsl4a/interpreter/html/HtmlActivityTask.java b/src/main/java/org/qpython/qsl4a/qsl4a/interpreter/html/HtmlActivityTask.java index b08b9f10255f1c9789963e97e44716e12e07e7a0..15bfaf7ab469a9f89d3dfd7ddf0c45e21d424cac 100644 --- a/src/main/java/org/qpython/qsl4a/qsl4a/interpreter/html/HtmlActivityTask.java +++ b/src/main/java/org/qpython/qsl4a/qsl4a/interpreter/html/HtmlActivityTask.java @@ -18,6 +18,7 @@ package org.qpython.qsl4a.qsl4a.interpreter.html; import android.annotation.SuppressLint; import android.app.Activity; +import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; @@ -74,7 +75,7 @@ public class HtmlActivityTask extends FutureActivityTask { + "return this._call(\"%1$s\", Array.prototype.slice.call(arguments)); };"; private static final String PREFIX = "file://"; - private static final String BASE_URL = PREFIX + InterpreterConstants.SCRIPTS_ROOT; +// private static final String BASE_URL = PREFIX + InterpreterConstants.SCRIPTS_ROOT; private final RpcReceiverManager mReceiverManager; private final String mJsonSource; @@ -139,7 +140,7 @@ public class HtmlActivityTask extends FutureActivityTask { source = source.replace("{{QPYBUILTIN}}","" + "" + ""); - mView.loadDataWithBaseURL(BASE_URL, source, "text/html", "utf-8", null); + mView.loadDataWithBaseURL(getBaseUrl(mView.getContext().getApplicationContext()), source, "text/html", "utf-8", null); Log.d("MyWebViewClient", source); @@ -150,6 +151,10 @@ public class HtmlActivityTask extends FutureActivityTask { } } + private String getBaseUrl(Context context){ + return PREFIX + com.quseit.util.FileUtils.getScriptsRootPath(context); + } + @SuppressLint({"SetJavaScriptEnabled", "JavascriptInterface"}) @Override public void onCreate() { @@ -196,7 +201,7 @@ public class HtmlActivityTask extends FutureActivityTask { + ""); //Log.d(TAG, "source:"+source); - mView.loadDataWithBaseURL(BASE_URL, source, "text/html", "utf-8", null); + mView.loadDataWithBaseURL(getBaseUrl(mView.getContext().getApplicationContext()), source, "text/html", "utf-8", null); } else { mView.loadUrl(mUrl); }