如何在本机代码中绑定 java 服务?

Posted

技术标签:

【中文标题】如何在本机代码中绑定 java 服务?【英文标题】:How to bind java service in native code? 【发布时间】:2016-03-09 00:12:44 【问题描述】:

是否可以在纯本机代码中绑定 java 服务?本质上就是在原生 C 代码下调用这部分代码

Intent i = new Intent(); 
i.setClassName("com.example.fooservice", 
    "com.example.fooservice.service"); 
bindService(i, clientConnection, Context.BIND_AUTO_CREATE);

【问题讨论】:

【参考方案1】:

不,不是直接的。但是,您可以通过 JNI 调用您的 NativeActivity 来完成它。

【讨论】:

我认为棘手的部分是获取 clientConnection 的回调,这也可以通过 JNI 实现吗? 另外,为什么 android 不允许本地代码访问 java android 服务..如果你正在编写一个本地应用程序,这似乎是一件非常合理的事情.. Android的dev模型是使用runtime,它为app的进入和控制提供了一种标准化的方式。甚至“本机”应用程序也包装在运行时中(NativeActivityActivity 的一种精简形式,它知道根据您的元数据调用您的本机代码。)框架提供的用 Java 编写的 API 比本机代码。 ServiceConnection 回调很棘手,您无法直接在本机代码中执行此操作。您必须扩展 NativeActivity 并编写自己的“挂钩”以通过 JNI 访问您的本机代码。

以上是关于如何在本机代码中绑定 java 服务?的主要内容,如果未能解决你的问题,请参考以下文章

如何在本机代码(Java、ObjectiveC/Swift)中读取 AsyncStorage

如何使用后期绑定调用本机 C 库?

windows下mysql 如何绑定ip为127.0.0.1

java如何获取本机IP?

如何从 Java Activity 传递数据以响应本机?

如何在本机中写入/读取直接 ByteBuffer?