我希望能够启动服务,或者在后台服务上运行类,但我想访问类我的cordova插件。
目前,我有类似下面的东西,这不是很好,但它的工作原理。但是,如果用户将应用程序推到后面,或者关闭应用程序(而不是服务),那么它就会停止运行。
当用户关闭UI或退出应用程序时,我需要MyHttpServer
继续运行。
public class MyCordovaPlugin extends CordovaPlugin {
private static final String TAG = "MyCordovaPlugin";
MyHttpServer httpServer;
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (httpServer == null) {
httpServer = new MyHttpServer();
}
if (action.equals("get-service-stats")) {
callbackContext.success(httpServer.getStats());
}
}
}
我知道要在后台运行服务,我可以使用下面的代码,我现在做的其他东西,它的工作原理,但我无法从cordova访问该实例。
// stop just encase its already started
context.stopService(new Intent(context, HttpServerService.class));
// start service
context.startService(new Intent(context, HttpServerService.class));
是否有一种特殊的方式来实现cordova插件和adnroid后台服务之间的通信?让我们说这个例子,MyHttpServer
作为一种方法称为getStats
,如果MyHttpServer在自己的Service
中运行,我怎么能在我的cordova插件中调用它。
所以像这样的东西,这是插件
public class MyCordovaPlugin extends CordovaPlugin {
private static final String TAG = "MyCordovaPlugin";
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (action.equals("get-service-stats")) {
// CALL HttpServerService.GETSTATS METHOD HERE
}
}
}
这是后台服务器
public class HttpServerService extends Service {
private static final String TAG = "HttpServerService";
private MyHttpServer httpServer;
private Context context;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
context = this.getApplicationContext();
httpServer = new MyHttpServer();
httpServer.start();
return Service.START_STICKY;
}
public string getStats() {
return httpServer.getStats();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
if (httpServer != null)
httpServer.stop();
super.onDestroy();
}
}
是否有一种特殊的方式来实现cordova插件和adnroid后台服务之间的通信?让我们说这个例子MyHttpServer作为一个方法就叫做getStats,如果MyHttpServer在自己的服务中运行,怎么能在我的cordova插件中调用它
您可以使用this Developers guide实现活动和服务之间的绑定。通过这样做,您将能够从活动中调用服务的方法。
目前,我有类似下面的东西,这不是很好,但它的工作原理。但是,如果用户将应用程序推到后面,或者关闭应用程序(而不是服务),那么它就会停止运行。
如果您希望它运行,您的服务必须是前台服务,即使您的活动将被停止。您应该看到this example实现前台服务。你必须知道背景执行的Oreo has some limitations。
对不起我的英语不好