【发布时间】:2012-02-23 11:51:12
【问题描述】:
我在 phonegap 中创建了后台服务插件(在后台运行应用程序)。
这是我的插件java代码:
public class BackgroundService extends Plugin {
@Override
public PluginResult execute(String action, JSONArray args, String callbackId)
{
PluginResult.Status status = PluginResult.Status.OK;
String result = "";
try {
if (action.equals("onCreate")) {
this.onCreate();
}
else if (action.equals("onBind")) {
Intent intent = null;
this.onBind(intent);
}
else if (action.equals("onDestroy")) {
this.onDestroy();
}
else if (action.equals("onStart")) {
Intent intent = null;
this.onStart(intent,args.getInt(1));
}
else if (action.equals("onUnbind")) {
Intent intent = null;
this.onUnbind(intent);
}
return new PluginResult(status, result);
} catch(JSONException e) {
return new PluginResult(PluginResult.Status.JSON_EXCEPTION);
}
}
public void onCreate() {
// TODO Auto-generated method stub
}
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
public void onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
//super.onStart(intent, startId);
}
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
}
public void onPause()
{
super.webView.loadUrl("javascript:navigator.BackgroundService.onBackground();");
}
public void onResume()
{
super.webView.loadUrl("javascript:navigator.BackgroundService.onForeground();");
}
}
我的js文件是:
function BackgroundService() {
};
BackgroundService.prototype.create = function() {
PhoneGap.exec(null, null, "BackgroundService", "onCreate", []);
};
BackgroundService.prototype.destroy = function() {
PhoneGap.exec(null, null, "BackgroundService", "onDestroy", []);
};
BackgroundService.prototype.start = function(intent,startId) {
PhoneGap.exec(null, null, "BackgroundService", "onStart", [intent,startId]);
};
BackgroundService.prototype.bind = function(intent) {
PhoneGap.exec(null, null, "BackgroundService", "onBind", [intent]);
};
BackgroundService.prototype.unbind = function(intent) {
PhoneGap.exec(null, null, "BackgroundService", "onUnbind", [intent]);
};
PhoneGap.addConstructor(function() {
PhoneGap.addPlugin("BackgroundService", new BackgroundService());
});
在我的 index.html 中。我在按钮单击中添加了以下代码
navigator.BackgroundService.onCreate(); navigator.BackgroundService.onStart(intent,1);
我的错误是:
ERROR/AndroidRuntime(14981): FATAL EXCEPTION: main
ERROR/AndroidRuntime(14981): java.lang.RuntimeException: Unable to instantiate service com.app.newly.BackgroundService: java.lang.ClassCastException: com.app.newly.BackgroundService
ERROR/AndroidRuntime(14981):at android.app.ActivityThread.handleCreateService(ActivityThread.java:2943)
ERROR/AndroidRuntime(14981):at android.app.ActivityThread.access$3300(ActivityThread.java:125)
ERROR/AndroidRuntime(14981): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2087)
ERROR/AndroidRuntime(14981): at android.os.Handler.dispatchMessage(Handler.java:99)
ERROR/AndroidRuntime(14981): at android.os.Looper.loop(Looper.java:123)
ERROR/AndroidRuntime(14981): at android.app.ActivityThread.main(ActivityThread.java:4627)
ERROR/AndroidRuntime(14981): at java.lang.reflect.Method.invokeNative(Native Method)
ERROR/AndroidRuntime(14981): at java.lang.reflect.Method.invoke(Method.java:521)
ERROR/AndroidRuntime(14981): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
ERROR/AndroidRuntime(14981): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
ERROR/AndroidRuntime(14981): at dalvik.system.NativeStart.main(Native Method)
ERROR/AndroidRuntime(14981): Caused by: java.lang.ClassCastException: com.app.newly.BackgroundService
ERROR/AndroidRuntime(14981): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2940)
ERROR/AndroidRuntime(14981): ... 10 more
如果我从 java 文件中删除 startService(new Intent(this,MyService.class)); 我得到以下错误:
ERROR/Web Console(4785): ReferenceError: Can't find variable: SqlitePlugin at file:///android_asset/www/BackgroundService.js:31
ERROR/Web Console(4785): TypeError: Result of expression 'window.plugins.SqlitePlugin' [undefined] is not an object. at file:///android_asset/www/index.html:26
否则我无法运行应用程序我在 java 文件中收到错误。我在此行的左角出现红十字标记(如 'X')' startService(new Intent(this,MyService.class));'请告诉我我哪里错了,请指导我,提前谢谢。
我在启动服务中遇到错误。当我将光标移动到 startService 时,我正在创建方法“startService(intent)”
我对这个插件有疑问,我能否在后台运行 javascript。如果有可能如何在后台获取警报。请告诉我我错在哪里,请指导我,谢谢前进。
【问题讨论】:
-
她的慈悲,我们能让这个工作吗?有机会您可以为其他人发布示例项目吗?