js与本地java通信 原创
cqyin
发布于 2021-8-18 09:10
浏览
0收藏
介绍
这里介绍下api6新出的js fa与本地java pa的通信,可以去鸿蒙官网 JS LocalParticleAbility机制 学习。
。
环境配置
1、新建js项目后,需要修改:
1) 项目根目录下的build.gradle,sdk版本修改,如下:
compileSdkVersion 6
defaultConfig {
compatibleSdkVersion 6
}
2) moudle下的build.gradle,sdk版本修改,同上;
3) 修改完成后,执行右上角sync now按钮。
2、 模拟器同样需要选择api6的,如下图:
java端
- 写一个自己的类继承自LocalParticleAbility,继承后里面的pulic方法js端均可以访问到,代码如下:
import ohos.ace.ability.LocalParticleAbility;
public class MyJSInterface implements LocalParticleAbility {
public static LocalParticleAbility getInstance(){
return new MyJSInterface();
}
public int plusSync(int number1,int number2){
return number1+number2;
}
public void plusAsync(int number1,int number2,Callback callback){
if (callback == null) return;
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
callback.reply(number1+number2);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
callback.reply(number1-number2);
}
}).start();
}
}
1) 同步方式(方法:plusSync),直接return结果,js会接收到一个Promise对象。
2) 异步方式(方法:plusAsync),开启线程模拟异步操作,利用Callback对象将数据返回给js。
2. 需要在js加载对应的ablility注册
public class MainAbility extends AceAbility {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
MyJSInterface.getInstance().register(this);
}
@Override
public void onStop() {
super.onStop();
MyJSInterface.getInstance().deregister(this);
}
}
js端
不要在js中onInit中调用,因为此时Java接口对象还未创建完成。java的同步方式返回的是Promise对象;java的异步方式是通过Callback对象给js返回数据,可以返回多次,具体代码如下:
let javaSer = createLocalParticleAbility("com.example.jsjavaconlocal.MyJSInterface");
javaSer.plusSync(1,2).then(result=>{
console.log(`结果是:${ result }`)
},error=>{
});
javaSer.plusAsync(1,2,result=>{
console.log(`结果是:${ result }`)
})
执行结果:
1) 同步结果
app Log: 结果是:3
2) 异步结果
app Log: 结果是:3
app Log: 结果是:-1
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
标签
已于2021-8-18 09:10:13修改
赞
2
收藏
回复
相关推荐
“java的异步方式是通过Callback对象给js返回数据,可以返回多次”这个返回多次是为了防止JS收不到返回数据?
应该不是,可以返回不同的数据,而且js可以接收到不同值,应该类似于java持有了一个js类,java可以通过此类的方法给js设置值。