
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
这里介绍下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的,如下图:
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中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