java - Phonegap - 插件和服务之间的通信

标签 java android cordova phonegap-plugins

我创建了一个启动服务的插件,并且运行良好。但是,我希望能够从插件将变量发送到正在运行的服务,并从服务中获取变量。我研究了广播/接收器和绑定(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/

相关文章:

android - 语音搜索权限

java - 安卓 OpenCV : drawing matches with feature2d

android - 如何使用 1080x1920 : 420 dpi - Android studio

ios - ionic 构建 iOS SDK 8.4

javascript - 如何从javascript返回值在android中设置变量

java,mockito - 我如何找出调用了哪些模拟?

java - 使用 Java 编写 SSL 检查器

java - 如何使用 Integer.parseInt(str) 的返回值计算 int 表达式

java - 如何检查 Snapchat 帐户是否存在?

android - 缺少 Visual Studio 2015 所需的包