我创建了一个启动服务的插件,并且运行良好。但是,我希望能够从插件将变量发送到正在运行的服务,并从服务中获取变量。我研究了广播/接收器和绑定(bind),但无法获得任何使用我下面使用的代码结构的示例。有人有什么建议吗?我对 Android 开发很陌生,对 Java(但不是编程)也很陌生,所以我还没有完全理解概念上的飞跃。
插件
public class IOIOconnect extends CordovaPlugin {
private Context thiscontext;
private Intent ioioService;
// Handle calls from Javascript
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
// Call from javascript to startup the IOIO service
if (action.equals("ioioStartup")) {
this.ioioStartup(callbackContext);
return true;
}
}
// Initialise IOIO service (Called from Javascript)
private void ioioStartup(CallbackContext callbackContext) {
// Initialise the service variables and start it it up
thiscontext = this.cordova.getActivity().getApplicationContext();
ioioService = new Intent(thiscontext, HelloIOIOService.class);
ioioService.putExtra("loadinterval", 800); // Set LED flash interval
thiscontext.startService(ioioService);
}
}
服务
public class HelloIOIOService extends IOIOService {
private int interval = 100;
@Override
public IBinder onBind(Intent intent) {
return null;
}
// USUAL IOIO SERVICE STUFF
@Override
public void onStart(Intent intent, int startId) {
// Service has been started
super.onStart(intent, startId);
// IOIO When service is started load external vars (if set)
int loadinterval = intent.getIntExtra("loadinterval", -1);
if(loadinterval>=0){ interval = loadinterval; }
// Native IOIO stuff
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
if (intent != null && intent.getAction() != null && intent.getAction().equals("stop")) {
// User clicked the notification. Need to stop the service.
nm.cancel(0);
stopSelf();
} else {
// Service starting. Create a notification.
Notification notification = new Notification(
R.drawable.ic_launcher, "IOIO service running",
System.currentTimeMillis());
notification
.setLatestEventInfo(this, "IOIO Service", "Click to stop",
PendingIntent.getService(this, 0, new Intent(
"stop", null, this, this.getClass()), 0));
notification.flags |= Notification.FLAG_ONGOING_EVENT;
nm.notify(0, notification);
}
}
}
最佳答案
我遇到了完全相同的问题:为 Salesforce Mobile SDK 编写插件(基于 Cordova 2.3.0)。
我的情况:插件和应用程序是不同的android项目。
解决方案是,您必须在主(应用)项目的 AndroidManifest.xml
中发布 Service
。请记住使用完整的合格路径和导出的方式对其进行签名,如下所示:
<service
android:name="full.qualified.path.to.Service"
android:exported="true">
</service>
关于java - Phonegap - 插件和服务之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15751484/