phonegap 애플리케이션 (Android)이 있습니다. xml 파일을 다운로드하려면 플러그인 Downloader을 사용합니다. 파일을 다운로드 할 때 다운로드가 완료 될 때까지 응용 프로그램이 "일시 중지"됩니다. 아무 것도 클릭 할 수 없으며 내 로더가 작동하지 않습니다.Phonegap cordova 앱이 일시 중지되었습니다. Android
잘 작동하는 데 사용되지만 코드가 1.8.0에서 새 버전 (2.7.0)으로 업그레이드해야했습니다.
필자도 새로운 코 도바에서 작동하도록 플러그인 자체를 변경했습니다.
나는이 원인을 알지 못합니다. 어떤 아이디어?
------- 편집 : ADDED CODE --------- 여기
내 다운 플러그인 클래스public class Downloader extends CordovaPlugin {
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) {
if (!action.equals("downloadFile")){
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.INVALID_ACTION));
return true;
}
try {
String fileUrl = args.getString(0);
JSONObject params = args.getJSONObject(1);
String fileName = params.has("fileName") ?
params.getString("fileName"):
fileUrl.substring(fileUrl.lastIndexOf("/")+1);
String dirName = params.has("dirName") ?
params.getString("dirName"):
Environment.getExternalStorageDirectory().toString();
Boolean overwrite = params.has("overwrite") ? params.getBoolean("overwrite") : false;
callbackContext.sendPluginResult(this.downloadUrl(fileUrl, dirName, fileName, overwrite, callbackContext));
return true;
} catch (JSONException e) {
e.printStackTrace();
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION, e.getMessage()));
return false;
} catch (InterruptedException e) {
e.printStackTrace();
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.ERROR, e.getMessage()));
return false;
}
}
private PluginResult downloadUrl(String fileUrl, String dirName, String fileName, Boolean overwrite, CallbackContext callbackContext) throws InterruptedException, JSONException {
try {
Log.d("PhoneGapLog", "Downloading "+fileUrl + " into " + dirName + "/" + fileName);
File dir = new File(dirName);
if (!dir.exists()) {
Log.d("PhoneGapLog", "directory " + dirName + " created");
dir.mkdirs();
}
File file = new File(dirName, fileName);
if (!overwrite && file.exists()) {
Log.d("DownloaderPlugin", "File already exist");
JSONObject obj = new JSONObject();
obj.put("status", 1);
obj.put("total", 0);
obj.put("file", fileName);
obj.put("dir", dirName);
obj.put("progress", 100);
return new PluginResult(PluginResult.Status.OK, obj);
}
URL url = new URL(fileUrl);
HttpURLConnection ucon = (HttpURLConnection) url.openConnection();
ucon.setRequestMethod("GET");
ucon.connect();
Log.d("PhoneGapLog", "Download start");
InputStream is = ucon.getInputStream();
byte[] buffer = new byte[1024];
int readed = 0,
progress = 0,
// totalReaded = 0,
fileSize = ucon.getContentLength();
FileOutputStream fos = new FileOutputStream(file);
while ((readed = is.read(buffer)) > 0) {
fos.write(buffer, 0, readed);
//totalReaded += readed;
//int newProgress = (int) (totalReaded*100/fileSize);
//if (newProgress != progress)
// progress = informProgress(fileSize, newProgress, dirName, fileName, callbackId);
}
fos.close();
Log.d("PhoneGapLog", "Download finished");
JSONObject obj = new JSONObject();
obj.put("status", 1);
obj.put("total", fileSize);
obj.put("file", fileName);
obj.put("dir", dirName);
obj.put("progress", progress);
return new PluginResult(PluginResult.Status.OK, obj);
}
catch (FileNotFoundException e) {
Log.d("PhoneGapLog", "File Not Found: " + e);
return new PluginResult(PluginResult.Status.ERROR, 404);
}
catch (IOException e) {
Log.d("PhoneGapLog", "Error: " + e);
return new PluginResult(PluginResult.Status.ERROR, e.getMessage());
}
}
} 여기
내 다운입니다 자바 스크립트function Downloader() {}
Downloader.prototype.downloadFile = function(fileUrl, params, win, fail) {
//Make params hash optional.
if (!fail) win = params;
return cordova.exec(win, fail, "Downloader", "downloadFile", [fileUrl, params]);
};
if(!window.plugins) {
window.plugins = {};
}
if (!window.plugins.downloader) {
window.plugins.downloader = new Downloader();
}
플러그인 그리고
를 호출 할 때$.mobile.showPageLoadingMsg();
window.plugins.downloader.downloadFile("URL",
{overwrite: true,
dirName: dir, fileName: "File.xml"},
function() {
alert("finished");
}, function(error) {
alert("fail");
);
다운로드가 마무리 또는 다운로드가
완료되면에만
당신은 –
코드를 추가 한 코드를 게시 할 수 있습니다 –