我正在开发
cordova移动应用程序。我想实现一个后台服务,做一些工作,如开放套接字连接syncronise本地数据库与远程的一个,并通知用户新的远程推送等。关键是我有这个代码在javascript中实现,但我想执行它我的背景。
我在网上搜索了一个cordova后台服务插件。
最好的一个我认为是red-folder,但它只是为了android,它不让我写在后台执行的javascript。但是只需在java和javascript之间交换json。
我已经阅读了一些有关后台服务的主题,这些都是我发现的有用的:
所以我开始编写cordova插件(主要是在android上)在后台执行JavaScript代码。我从后台服务创建了一个webview来执行javascript。当我执行正常的JavaScript时,这可以正常工作,但是当涉及到cordova插件js它失败,例如device.uuid设备为null。
这是java服务代码:
public void onStart(Intent intent, int startId) {
Toast.makeText(this, "My Happy Service Started", Toast.LENGTH_LONG).show();
createBackGroundView();
super.onStart(intent,startId);
}
public void createBackGroundView(){
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutParams params = new WindowManager.LayoutParams(
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT
);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 0;
params.width = 200;
params.height = 200;
LinearLayout view = new LinearLayout(this);
view.setLayoutParams(new RelativeLayout.LayoutParams(
android.view.ViewGroup.LayoutParams.MATCH_PARENT,
android.view.ViewGroup.LayoutParams.MATCH_PARENT
));
WebView wv = new WebView(this);
wv.setLayoutParams(new LinearLayout.LayoutParams(
android.view.ViewGroup.LayoutParams.MATCH_PARENT,
android.view.ViewGroup.LayoutParams.MATCH_PARENT
));
view.addView(wv);
wv.getSettings().setJavaScriptEnabled(true);
wv.setWebChromeClient(new WebChromeClient());
wv.loadUrl("file:///android_asset/www/background.html");
wv.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(final WebView view, int errorCode,
String description, final String failingUrl) {
Log.d("Error","loading web view");
super.onReceivedError(view, errorCode, description, failingUrl);
}
});
windowManager.addView(view, params);
}
更新
logcat中没有错误。
所以我试图在屏幕上写设备对象,这就是我所得到的:
document.write(JSON.stringify(window.device))
这是结果:
{ available : false,
plaform : null ,
version : null ,
uuid : null ,
cordova : null ,
model : null
}
我试图用cordovaWebView替换标准的webView但是给出了相同的结果。
//WebView wv = new WebView(this); Commented out
CordovaWebView wv = new CordovaWebView(this);
对这个问题有任何帮助吗?