# JS如何调用Android方法

JS端调用Android方法示例:

import { jJsvRuntimeBridge } from "jsview"

jJsvRuntimeBridge.方法名()
1
2
3

# 支持的方法

# getWireMac

// JS接口: 获取有线MAC信息
function getWireMac();
1
2

# getWifiMac

// JS接口: 获取无线MAC信息
function getWifiMac();
1
2

# getDeviceUUID

// JS接口: 获取UUID,使用mac地址与序列号生成
function getDeviceUUID();
1
2

# getAndroidId

// JS接口: 获取AndroidId
function getAndroidId();
1
2

# openWindow

/**
 * 打开另外一个小程序
 * @param {string} url 小程序url
 * @param {string} startup_image 启动图url
 * @param {string} startup_video 启动视频url
 * @param {int} startup_duration 启动图时长,默认0
 * @param {int} add_history 是否添加历史,0不添加,1添加
 * @returns {Promise} 可用于监听新的小程序返回的结果
 */
function openWindow(url, startup_image, startup_video, startup_duration, add_history);
1
2
3
4
5
6
7
8
9
10

使用示例: 第一个小程序

// openWindow打开某个小程序
let promise = jJsvRuntimeBridge.openWindow("jsvappid://APPID_pyh");
// 接收小程序的返回的数据(只会有一次)
promise.then((result)=>{
    console.log("收到数据:"+result) //abcd
}).catch((result)=>{
    
})
1
2
3
4
5
6
7
8

第二个小程序

// 返回数据给上一个小程序,只能调用一次
jJsvRuntimeBridge.onWindowResult("abcd")
1
2

# startUrlInNewTab

/**
 * 用新的进程打开另外一个小程序
 * @param {string} url 小程序url
 * @param {string} startup_image 启动图url
 * @param {string} startup_video 启动视频url
 * @param {int} startup_duration 启动图时长,默认0
 * @param {int} add_history 是否添加历史,0不添加,1添加
 * @returns {Promise} 可用于监听新的小程序返回的结果
 */
function startUrlInNewTab(url, startup_image, startup_video, startup_duration, add_history);
1
2
3
4
5
6
7
8
9
10

打开新的进程会触发java部分的逻辑,需要自己实现,具体参考独立进程页面支持

# onWindowResult

需要配合openWindow或者startUrlInNewTab或者warmLoadView使用

/**
 * 用于给上一个小程序返回结果,通常与startUrlInNewTab和openWindow配合使用
 * @param {string} data 返回给上一个小程序的结果
 */
function onWindowResult(data);
1
2
3
4
5

# reloadWindow

/**
 * 重新加载一个小程序覆盖当前小程序
 * @param {string} url 小程序url
 * @param {string} startup_image 启动图url
 * @param {string} startup_video 启动视频url
 * @param {int} startup_duration 启动图时长,默认0
 * @param {int} add_history 是否添加历史,0不添加,1添加
 */
function reloadWindow(url, startup_image, startup_video, startup_duration, add_history);
1
2
3
4
5
6
7
8
9

# getStartParams

/**
 * 获取启动内核版本和引擎
 * @returns {Object} 包含
 *      COREVERSIONRANGE: 启动时设定的内核版本范围
 *      ENGINE: 启动时设定的Js引擎的URL
 */
function getStartParams();
1
2
3
4
5
6
7

# getExtFeaturesSupport

/**
 * 获取当前集成JsView的APP目前支持的扩展功能列表
 *
 * @returns {string} 功能列表,以逗号隔开,包含:
 *      favourite : 支持加入收藏夹功能
 *      history : 支持浏览后自动进入历史记录功能
 *      textureVideo : 支持将video渲染到texture的方式(JsvVideo高阶控件的usetexture属性控制)
 */
function getExtFeatureSupports();
1
2
3
4
5
6
7
8
9

# closePage

// JS接口: 退出当前小程序
function closePage();
1
2

# getSystemProperty

/**
 * 获取系统属性
 * @param {string} key 属性名称,比如:ro.product.model。
 * @returns {string} 属性值
 *
 */
function getSystemProperty(key);
1
2
3
4
5
6
7

# getInstalledApps

/**
 * 获取已安装应用列表
 * @returns {string} 应用列表,JSON结构的数组
 *
 */
function getInstalledApps();
1
2
3
4
5
6

# startNativeApp

/**
 * 启动安卓APP
 * @param {string} package_name 包名
 * @param {string} activity Activity方式启动
 * @param {string} action Action方式启动
 * @param {string} uri Uri方式启动
 * @param {Array} flags 数组,用于intent.addFlags
 * @param {Array} param JSON格式数组,数组元素是 object ,object中的内容用于intent.putExtra
 *
 */
function startNativeApp(package_name, activity, action, uri, flags, param);
1
2
3
4
5
6
7
8
9
10
11

# sendNativeBroadcast

/**
 * 发送安卓广播
 * @param {string} package_name 包名
 * @param {string} broadcast 广播类名,比如“com.qcode.MyBroadcastReceiver”,用于intent.setComponent()
 * @param {string} action 对应 intent.setAction()
 * @param {string} uri 对应intent.setData()
 * @param {Array} flags 数组,用于intent.addFlags
 * @param {Array} param JSON格式数组,数组元素是 object ,object中的内容用于intent.putExtra
 *
 */
function sendNativeBroadcast(package_name, broadcast, action, uri, flags, param){
1
2
3
4
5
6
7
8
9
10
11

# startService

/**
 * 启动Android 服务
 * @param {string} package_name 包名
 * @param {string} services 服务类名,比如“com.qcode.MyService”,用于intent.setComponent()
 * @param {string} action 对应 intent.setAction()
 * @param {string} uri 对应intent.setData()
 * @param {Array} flags 数组,用于intent.addFlags
 * @param {Array} param JSON格式数组,数组元素是 object ,object中的内容用于intent.putExtra
 * @param {boolean} is_foreground 是否使用startForegroundService
 */
function startService(package_name, services, action, uri, flags, param,is_foreground);
1
2
3
4
5
6
7
8
9
10
11

# warmUpView

/**
 * 页面预热接口,预热页面将会将以一个新的FrameLayout(内含JsView)的方式加载一个新的应用
 * 但这个应用在warmLoadView之前,不会创建texture/surface的实际描画资源,也不会加载图片
 * 仅加载所有JS代码,并正常走完所有启动逻辑(包括描画逻辑),但不会走setTimeout对应的延时逻辑,也不会显示
 * 预热的界面可以极大加速界面切换的时间,例如应用跳转到购物类界面
 * mode为1表示全预热,app_url不能为空,mode为2表示只预热engine url,如果app_url不为空,engine url来自于app_ur
 * 否则来自于当前使用的engine url,app_url表示小程序的链接。
 * 【特别注意】warmUp起来的view,在warmLoadView调用之前,若启动者JsView关闭的话,此View应该在
 *  View管理模块被清理掉,以防泄露,但在warmLoadView完成后,就不需要进行关联清理,请管理模块务必保证此机制。
 * [参数]
 *      int mode  预热模式,1:全预热,目前只支持1
 *      String app_url  要预热的app_url,当半预热时,可以为null
 * [返回值]
 *      int: 为view_refer_id值,预热后的View的ID,用于后续的warmLoadView和closeWarmView使用
 */
function warmUpView(mode, app_url) ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# warmLoadView

/**
 * 将warmUpView后的View展示出来
 * 当warmUpView中设置了app_url时,仍可以新的app_url调整history hash(#)部分进行子页面切换
 *
 * @param {number} view_refer_id warmUpView调用后返回来的View ID
 * @param {string} app_url     无意义,请传固定值 null
 * @param {boolean} add_history 启动的界面是否进访问历史列表
 * @returns {Promise} 可用于监听新的小程序返回的结果
 */
function warmLoadView(view_refer_id, app_url, add_history);
1
2
3
4
5
6
7
8
9
10

# closeWarmedView

/**
 * 关闭warmUp后未进行warmLoad的View,释放资源
 * @param {number} view_refer_id warmUpView调用后返回来的View ID
 */
function closeWarmedView(view_refer_id);
1
2
3
4
5

# getDeviceInfo

/**
 * 获取设备信息
 * @returns {string} 终端设备信息,JSON数据结构
 */
function getDeviceInfo();
1
2
3
4
5

# notifyPageLoaded

// JS接口: 从JS发出界面加载完成的通知,可以触发隐藏启动图的动作
function notifyPageLoaded();
1
2

# preDownloadSdk

/**
 * 触发预下载内核
 * @param {string} core_version 带branch(主分支版本不带此信息)和版本信息的内核版本, 
 *                              例如: 1021265_release_build_xxx
 * @returns {promise} 对象,用于监听下载完成与下载失败
 */
function preDownloadSdk(core_version);
1
2
3
4
5
6
7

使用示例:

jJsvRuntimeBridge.preDownloadSdk("1021333").then((version)=>{
    //加载成功
}).catch((errorInfo)=>{
    //加载失败
    
})
1
2
3
4
5
6
Last Updated: 4/19/2024, 8:40:44 AM