从 TypeScript 调用 Android 方法

2024-04-19

Android 将 JS 接口注入到 Web 视图中:

JavaScriptInterface javaScriptInterface = new JavaScriptInterface(this);
browser.addJavascriptInterface(javaScriptInterface, "qp");

界面如下所示:

public class JavaScriptInterface {

    private ILoadEpi iLoadEpi;

    public JavaScriptInterface(ILoadEpi iLoadEpi) {
        this.iLoadEpi = iLoadEpi;
    }

    @JavascriptInterface
    public void passParameters(String fldMerchCode,
                               String fldMerchRefNbr,
                               String fldTxnAmt,
                               String fldTxnScAmt,
                               String fldDatTimeTxn,
                               String fldDate1,
                               String fldDate2
                               ) {
        Log.d("fldMerchCode", fldMerchCode);
        Log.d("fldMerchRefNbr", fldMerchRefNbr);
        Log.d("fldTxnAmt", fldTxnAmt);
        Log.d("fldTxnScAmt", fldTxnScAmt);
        Log.d("fldDatTimeTxn", fldDatTimeTxn);
        Log.d("fldDate1", fldDate1);
        Log.d("fldDate2", fldDate2);
        iLoadEpi.loadEpi(fldMerchCode, fldMerchRefNbr, fldTxnAmt, fldTxnScAmt, fldDatTimeTxn, fldDate1, fldDate2);
    }
}

使用 TypeScript 开发的 Web 应用程序如何称为 Android?

或者更广泛地说,TypeScript 应用程序如何调用 Android 方法?


为将由 Android 注入的 JavaScriptInterface 类型添加 TypeScript 定义。然后用Android注入的实例名称声明一个变量,然后照常使用它。在您的示例中,您需要的定义是:

interface JavaScriptInterface {
    passParameters(fldMerchCode: string,
                   fldMerchRefNbr: string,
                   fldTxnAmt: string,
                   fldTxnScAmt: string,
                   fldDatTimeTxn: string,
                   fldDate1: string,
                   fldDate2: string) : void;
}

declare var qp: JavaScriptInterface;

The qpAndroid注入的实例会有该方法passParameters可以在上面找到。该实例由 Android 创建,名称为qp在你的电话中browser.addJavaScriptInterface(javaScriptInterface, "qp");。请注意,这取决于您的passParameters使用函数时,您可能需要将返回类型声明为any代替void.

这是一个基于以下内容的完整示例Android 绑定 JS 指南 https://developer.android.com/guide/webapps/webview.html#BindingJavaScript:

在您的 HTML 文件中,添加:

<input type="button" value="Say hello" id ="button"/>
<script src="./generated/bundle.js"></script>

我假设您生成/转换的 JavaScript 位于./generated/bundle.js,相对于 HTML 文件。

在您的 TypeScript 文件中,添加:

interface WebAppInterface {
    showToast(toast: string) : any;
}

declare var android: WebAppInterface;

var button = document.getElementById('button');
button.onclick = ()=>android.showToast('Hello Android!');

请注意,链接的 Android 示例命名了注入的对象android:

webView.addJavascriptInterface(new WebAppInterface(this), "android");

如果链接的示例发生更改或消失,以下是示例 WebAppInterface.java:

public class WebAppInterface {
    Context mContext;

    /** Instantiate the interface and set the context */
    WebAppInterface(Context c) {
        mContext = c;
    }

    /** Show a toast from the web page */
    @JavascriptInterface
    public void showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 TypeScript 调用 Android 方法 的相关文章

  • 将输入字段限制为两位小数 - Angular 5

    代码如下
  • AudioTrack 可以播放 MIDI 文件吗?

    我想知道AudioTrack Android可以播放MIDI文件吗 如果没有的话哪个库可以 因为我想要 Android 库 可以为我的应用程序播放和控制 MIDI 文件的速度 从这里检查 Android 支持的媒体格式Android 媒体支
  • 在 Fragment 和 Activity 之外通过 Hilt 进行现场注入

    我想知道是否可以在片段或活动之外使用字段注入 我知道我可以使用构造函数注入 但是我想知道是否也可以使用字段注入 我认为 Dagger 是可能的 当我尝试用注入的东西做某事时yclass字段我收到此错误 lateinit property y
  • 如何在 Angular 4 材料的 Stepper 中提交表单

    如何在角材料的步进器中提交表单数据 我正在遵循角材料的示例https material angular io components stepper examples https material angular io components
  • 找不到 java.lang.Object 的类文件

    我重新安装了我的日食 然后在Eclipse中导入所有项目 但是每个项目都有一个常见的错误 Cannot find the class file for java lang Object at Line 1 我检查了我的 Java 路径 但无
  • 如何在 PrimeNG 的 FileUpload 组件中中止文件上传?

    一 总结 基于PrimeNG中选择的文件文件上传组件 https www primefaces org primeng fileupload 我想中止特定文件名模式的文件上传到后端服务器 角度 6 0 7 PrimeNG 6 0 2 2 第
  • 在打字稿中读取和写入文本文件

    我应该如何从 Node js 中的 TypeScript 读取和写入文本文件 我不确定是否会在 node js 中读 写沙箱文件 如果没有 我相信应该有一种访问文件系统的方法 相信应该有一种访问文件系统的方法 Include node d
  • 将 Android Studio 2.0 模拟器与 Google 服务结合使用

    根据 Android 开发者博客中的一篇文章 关于Android Studio 2 0 发布 http android developers blogspot ca 2016 04 android studio 2 0 html Andro
  • 在 TypeScript 中使用三个 Js + OrbitControl

    我无法得到this http www example com 在 TypeScript 中使用上述组合的示例 I have and 在我的html中和打字稿文件
  • Android:OneSignal 如何使用自定义图标或应用程序图标更改通知账单图标?

    收到通知时 将显示帐单图标 而不是我覆盖它以从代码中显示的应用程序图标或自定义图标 我可以从仪表板更改图标 但我想从代码中处理它 内化 OneSignal startInit this inFocusDisplaying OneSignal
  • android:clickable="true" 意味着它不可点击?

    我有一个 ListView 其中包含一些自定义部分 每个部分都有自己的标题视图 我希望列表中的元素可单击 但显然不希望节标题可单击 所以在我添加的节标题的 xml 中android clickable false 调试时我注意到节标题仍然响
  • Xamarin 中 QR 扫描后的处理对话框

    我在Xamarin应用程序中使用QR码扫描仪 当它扫描QR码时 它会执行一些操作 大约需要一分钟 而在执行操作时 我想在屏幕上显示一个加载对话框 但是 它没有显示在屏幕上 并且在应用程序的其他地方 它运行得很好 Code var expec
  • 使用 Android 应用程序将条目发布到 SQL Server

    我是一个真正的新手 如果这个问题听起来很愚蠢 我提前道歉 我正在尝试创建一个应用程序 允许我将客户数据发布到 Windows 服务器上的 SQL Server 这可能吗 如果是这样 我需要什么 再次感谢您的帮助 如果这是一个愚蠢的问题 我再
  • 在 Android 中读取蓝牙 RSSI 以获取 BLE 邻近配置文件

    我目前正在为 Android 开发低功耗蓝牙接近配置文件 并且偶然发现了有关 RSSI 的问题 为了使邻近配置文件起作用 我必须每隔很短的时间就通过已连接的设备接收 RSSI 数据 正如我所做的一些研究 我了解到在设备发现过程中可以获得蓝牙
  • 与动态功能模块(应用程序包)一起安装时“存储空间不足”

    我有一个使用 Android App Bundle 的 DFM 动态安装的 Unity 项目 使用 Unity 2019 3 导出 并将其上传到 google play 进行内部测试 动态模块可以按需下载 但是当我运行 UnityActiv
  • 在 Java、Android 上从 Youtube 下载视频的代码

    我创建了从 Youtube 下载视频的代码 但此代码不适用于 Wi fi 连接 但适用于移动连接 我哪里有错误 import java io File import java io FileOutputStream import java
  • Typescript 中的forwardRef 和defaultProps

    我正在尝试在forwardRef 中使用defaultProps 当我使用没有forwardRef的MessageBox时 它与defaultProps配合得很好 但是 当我使用forwardRef 时 会发生错误 怎么解决呢 打字稿 3
  • 即使设置为 false,clipChildren 也不起作用?

    在我的应用程序中 我尝试使用动画移动图像 当我尝试制作动画时 即使我使用了图像 图像也会被剪切clipChildren每个 xml 块中均为 false
  • TypeScript 中的可等待类型

    我在 JavaScript 中经常使用 async await 现在我正在逐渐将代码库的某些部分转换为 TypeScript 在某些情况下 我的函数接受将被调用和等待的函数 这意味着它可以返回一个承诺 只是一个同步值 我已经定义了Await
  • 指针问题! (安卓)

    我在 onTouch 方法中遇到多个指针的问题 所有指针都与一个布尔值相关联 如果向下则为 true 如果向上则为 false 非常重要的是 如果一个指针从 true 变为 false 它不会影响其他布尔值 我遇到的问题是 例如 当指针 1

随机推荐

  • 如何使用邮递员查看返回的 html 呈现为网页

    我正在与邮递员一起测试 Flask 应用程序 我注意到 如屏幕截图所示 我收到了返回的 HTML 我知道过去我能够看到返回的 HTML 呈现为网页 但现在我不能 尽管单击各种按钮 如何将返回的 html 作为网页查看 In order to
  • 如何在 odoo 8 中导入 QOH

    我想通过 odoo 前端或使用后端 postgres 查询 更新 odoo 中的库存 我的股票价值保存在 csv 文件中 最后 我想批量更新现有数量 终于解决了 按照步骤操作即可 步骤1 1 gt 在仓库模块中选择产品 在列表视图中打开 2
  • 检测我们何时移回 Flutter 中的上一页

    我们从 Page1 移至 Page2 但现在从 Page2 移回 Page1 如下所示 Navigator of context pop 我们如何在 Page1 上检测到我们返回了 Navigator push context Materi
  • 使用 .NET 创建采用 JPEG 压缩的多页 TIFF

    有没有办法使用 NET 创建多页 TIFF 和 JPEG 压缩 我可以使用 LZW 压缩创建 TIFF 但文件非常大 好像EncoderValue枚举 我用来设置压缩 甚至没有合适的成员 你可以看看 gt gt 这篇文章 https sta
  • 这个查询可以安全地避免 SQL 注入吗?

    该脚本使用 PHP 编写 作为数据库 我使用 MySQL 这是脚本本身 unsafe variable GET user input sql sprintf INSERT INTO table column VALUES s unsafe
  • Drupal Studs 帮助我使用 form_alter 钩子(我就快到了)

    所以我认为我在概念上已经差不多了 但需要一些缺失的指导 目标是向普通用户注册表单添加一些字段 对其进行一些样式设置 然后将其提交并将额外的字段存储在表中 这是我到目前为止所拥有的 有人可以给我最后的推动并让我继续前进吗 请帮我 另外 如何应
  • Ionic2/Cordova typescript 项目中的 Moment.js 插件

    在我用 Typescript 编写的 Ionic 2 项目中 我使用 moment js 库 我使用代码片段导入它 import as moment from moment 这样做之后 在我的组件中我可以正常使用 moment 即 let
  • setlocale() 的用途是什么?

    我正在学习c 我发现了C 库的这个函数 setlocale http www cplusplus com reference clocale setlocale http www cplusplus com reference clocal
  • Caffe:如果内存中只能容纳一小部分,我该怎么办?

    我正在尝试训练一个非常大的模型 因此 我只能将非常小的批量大小放入 GPU 内存中 处理小批量的结果非常噪声梯度估计 https stackoverflow com a 33717093 1714410 我该怎么做才能避免这个问题 您可以更
  • PHP in_array() / array_search() 奇怪的行为

    我在使用 PHP 函数时发现了一些奇怪的行为in array 我有一个像这样的数组 arr TRUE some string something else 现在如果我想检查是否 test 显然不在数组中 但是in array 仍然返回 TR
  • 制作自定义 Android 闹钟以进行提醒

    我正在制作药物提醒应用程序 在该应用程序中 我添加了添加有关医生预约提醒的功能 在我的应用程序中 允许用户设置他 她自己的日期和时间 并且在该日期和时间应该触发警报 请帮助我 我已从此线程中参考 如何在Android中设置闹钟 https
  • 使用 mysql 选择 id 周围的行之前和之后

    我需要使用 mySQL 获取 ID 周围的 ID Example 表中ID 2 4 5 9 11 15 19 22 25 例如 我需要知道 ID 9 周围的 5 个 ID 查询应返回 4 5 9 11 15 Thanks 一个可能的解决方案
  • C++ 错误:“_mm_sin_ps”未在此范围内声明

    我正在尝试对将函数应用于数组的不同方法进行基准测试 why is mm sin ps在我的范围内不知道但是 mm sqrt ps is 我怎样才能让它知道 并且编译没有错误 include
  • 如何设置“react-native-drawer”在react-native中登录后仅对仪表板可见

    在反应本机中 我想禁用抽屉Login并启用抽屉 在Dashboard屏幕 我已经实施了 react native drawer with Navigator在路线之间导航 渲染方法如下 render
  • 如何使用触摸屏调用和关闭 Tkinter 制作的虚拟键盘

    我在打开和关闭使用 Tkinter 制作的虚拟键盘时遇到问题 我正在创建一个 GUI 用户将使用触摸屏显示器浏览它 并且用户需要输入条目 我试过了var name bind FocusIn callback 调用虚拟键盘并var name
  • 如何使用SVN、Branch?标签?树干? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在谷歌上搜索了一下 找不到一个好的 初学者 指南SVN http en wikipedia org wiki Subversion
  • PostgreSQL 中的多个 DISTINCT ON 子句

    是否可以选择以下行DISTINCT ON一些单独的 独立的列集 假设我想要满足以下条件的所有行 明显于 name birth 明显于 name height 因此 在下表中 标有红叉的行不会有所不同 并指示失败的子句 name birth
  • 将具有开始 - 结束的行转换为具有 TimeIndex 的数据帧的性能问题

    我有一个大型数据集 其中每行代表某个时间间隔 开始和结束之间 的某种类型 认为是传感器 的值 它看起来像这样 start end type value 2015 01 01 2015 01 05 1 3 2015 01 06 2015 01
  • 在 Scala 中解析 JSON 最直接的方法是什么?

    我正在使用 Scala 开发一个简单的 Web 应用程序 计划是从外部 API 获取 JSON 数据 并将其插入到模板中 不幸的是 不能选择获取 XML 格式的数据 我尝试过使用 Twitter 的 scala json 库 但无法正确编译
  • 从 TypeScript 调用 Android 方法

    Android 将 JS 接口注入到 Web 视图中 JavaScriptInterface javaScriptInterface new JavaScriptInterface this browser addJavascriptInt