从 js 使用 Phonegap 3.0 调用 Activity 方法的最佳方式

2023-12-28

我正在尝试使用 MainActivity 中的本机方法从phonegap 中的index.html 拨打电话。

我使用的是phonegap 3.0和android 4.3平台。我尝试过第二个答案 https://stackoverflow.com/a/12404928/2021499 on this https://stackoverflow.com/questions/7292553/how-to-call-an-android-activity-from-phonegap发布,但它不适用于此版本。

我想知道解决这个问题的最佳方法是什么?


您可以创建自定义插件来从本机端调用任何方法。创建一个单独的 JavaScript 文件,例如 customplugin.js,并将其放入其中:

var CustomPlugin = {};

CustomPlugin.callNativeMethod = function() {
    cordova.exec(null, null, "CustomPlugin", "callNativeMethod", []);
};

现在,在本机 Java 端,创建一个新类并将其命名为 CustomPlugin.java,然后添加以下内容:

package com.yourpackage;

import org.apache.cordova.CordovaWebView;
import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.CordovaInterface;
import org.apache.cordova.api.CordovaPlugin;

import com.yourpackage.MainActivity;

public class CustomPlugin extends CordovaPlugin
{
    private static final String TAG   = "CustomPlugin";

    private CallbackContext callbackContext = null;
    private MainActivity activity = null;

    /** 
     * Override the plugin initialise method and set the Activity as an 
     * instance variable.
     */
    @Override
    public void initialize(CordovaInterface cordova, CordovaWebView webView) 
    {
        super.initialize(cordova, webView);

        // Set the Activity.
        this.activity = (MainActivity) cordova.getActivity();
    }

    /**
     * Here you can delegate any JavaScript methods. The "action" argument will contain the
     * name of the delegated method and the "args" will contain any arguments passed from the
     * JavaScript method.
     */
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException 
    {
        this.callbackContext = callbackContext;

        Log.d(TAG, callbackContext.getCallbackId() + ": " + action);

        if (action.equals("callNativeMethod")) 
        {
            this.callNativeMethod();
        }
        else
        {
            return false;
        }

        return true;
    }

    private void callNativeMethod()
    {
        // Here we simply call the method from the Activity.
        this.activity.callActivityMethod();
    }
}

确保通过添加以下行来映射 config.xml 文件中的插件:

...
<feature name="CustomPlugin">
    <param name="android-package" value="com.yourpackage.CustomPlugin" />
</feature>
...

现在要从 index.html 调用插件,您只需调用 JavaScript 方法即可:

CustomPlugin.callNativeMethod();

使用此方法可以让您方便地设置许多自定义方法。有关更多信息,请查看 PhoneGap 插件开发指南here http://docs.phonegap.com/en/2.9.0/guide_plugin-development_android_index.md.html#Developing%20a%20Plugin%20on%20Android.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 js 使用 Phonegap 3.0 调用 Activity 方法的最佳方式 的相关文章

  • Android spinner 将多列(连接)Sqlite 数据库加载到表中

    我正在学习如何创建一个从 SQLite 加载下拉列表的微调器 我有一个由旋转器和表格组成的用户界面 如果用户单击微调器 表的内容将根据微调器上选定的 ID 根据数据库加载 如果未选择名称 它将加载表中的所有内容 但是我找不到如何根据微调器上
  • 序列化 ArrayList

    我正在尝试编写一个 Android 游戏 即使用户想要返回主菜单或者活动被系统终止 我也希望能够暂停游戏 onSaveInstanceState 似乎并没有给我很大的控制权来决定何时可以读回捆绑包 而且据我所知 捆绑包仅在短时间内有效 所以
  • 无法调用类的无参数构造函数。向 Gson 注册此类型的 InstanceCreator 可能会解决此问题

    java lang RuntimeException Unable to invoke no args constructor for class com arch example network models NetworkPagingL
  • 如何创建轮播ViewPager?

    我想做的只是 Android 中的水平轮播 如果我有 3 个屏幕 A B 和 C 那么我希望我的 ViewPager 允许我像这样移动 A B B C C A GTalk for Android 的对话可以这样切换 三星的主屏幕和应用程序屏
  • 检查 key 是否存在 firebase Android

    我想检查 firebase 数据库中是否存在密钥 例如 我想查找关键的 upvotes 以查看它是否存在 Here is an exmaple upvotes key does not exist in here 现在我尝试检查密钥 upv
  • 如何将弹出菜单项的方向从右向左更改?

    我知道这个问题被问了很多次 我使用了很多解决方案 但它对我不起作用 我想改变我的方向Menu to rtl用一个Popup但它不起作用 my menu menu menu
  • Android view.animate() 第一次执行后工作方式不同且错误

    我已经实现了一个横幅 每当用户失去连接时就会弹出 重新连接后 另一个横幅会显示几秒钟然后消失 布局是一个RelativeLayout 其中一个灰色的TextView 表示警告 一个绿色的TextView 表示重新连接消息 如果我只是更改 V
  • 在移动浏览器或 PhoneGap 应用程序之间进行检测

    是否可以使用 JavaScript 检测用户是否通过浏览器或应用程序进行访问 我正在通过网页和 PhoneGap 应用程序开发适用于多个移动操作系统的混合应用程序 目标是 独立于部署目标使用相同的代码 仅当用户代理是应用程序时添加 Phon
  • Android studio 3.0不生成签名的apk

    将 android studio 更新到版本 3 0 Windows 后 我无法生成签名的 APK 构建完成后 我收到消息 单击 查找 会将我带到 APP 文件夹 但找不到 APK 改变了什么 自Android Studio 3 0更新后
  • 文本末尾有额外的换行符

    使用此方法设置文本后 我似乎得到了一些额外的换行符TextView message setText Html fromHtml message 我怎样才能删除这些 它们导致我的布局扭曲 因为它在输出中添加了两条额外的行 该字符串已通过以下方
  • 如果使用键盘,如何捕获 TimePicker 中的时间变化?

    我有一个小部件 它是一个 TimePicker 用于检索数据库字段中保存的时间 问题是 当用户更改小部件中的时间值时 这不会保存在数据库中 所以我遇到了setOnTimeChangedListener如果您只在小部件中使用加号和减号 那么该
  • 使用协程对任务进行排队

    我最近开始阅读有关协程的内容 我想询问某个场景 考虑一个带有一个按钮的简单屏幕 单击后 它会执行一堆打印语句和一些延迟 其间 到目前为止 我正在使用协程来实现这一目标 现在 我的问题是 如果用户反复向该按钮发送垃圾邮件 是否有一种方法可以将
  • Android:调用超类的原因?

    我正在查看 Android 开发人员网站上的记事本教程 我有一个关于调用活动超类的重写函数的问题 例如 public class Notepadv3 extends ListActivity Override public boolean
  • 将对象传递给活动

    我可以在第一个活动中初始化对象并在所有活动中初始化对象吗 public class Calc int x int y public Calc int x int y this x x this y y public int sum retu
  • 将 glReadPixels 替换为 EGL_KHR_image_base 以加快像素复制速度

    我试图在 Android 本机进程中使用 EGL KHR image base 来替换 glReadPixels 因为它很慢 1280x800 RGBA 为 220ms 这是我到目前为止所拥有的 但我的它产生一个空缓冲区 只有零 uint8
  • Android 上的 Facebook 社交插件

    我想集成 Facebook 的评论社交插件 https developers facebook com docs reference plugins comments https developers facebook com docs r
  • 使用 cordova 工具集构建应用程序时出错

    我正在使用 Visual Studio 2017 社区版 并且只需使用 vs 文档中的步骤即可使用 macincloud 服务进行远程构建 我基本上遇到了以下明确的错误 来自构建服务器的远程构建错误https xxxx macincloud
  • 将 Spritekit 游戏转换为 Android?

    是否有任何新选项可以将 spritekit 游戏转换为 Android 游戏 似乎唯一的选择是用 Java 重新编码所有内容或使用 Cocos2D LibGDX 等 很不幸的是 不行 而且带有 Apportable 服务的跨平台 Sprit
  • 如何使用Android Studio录制Android屏幕?

    我已经在 Mac 上的 Applications 文件夹中安装了 Android Studio 我认为 sdk 位于包内容中 但现在我想使用 AShot jar 录制屏幕以获取应用程序的演示视频 我必须放弃SDK的路径 当我给出我认为正确的
  • Android NDK - 仅用 C/C++ 编写

    有没有一种可能的方法可以使用 C C 编写整个 NDK 应用程序 而无需像 hello jni 示例项目 HelloJni java 中那样的 Java 入门 类 以某种方式创建一个 HelloJni c 来执行相同的操作 从 Androi

随机推荐

  • 有没有办法读取 clojure 文件中的所有表单?

    If I use gt
  • ListAdapter修改数据源(这是一个arraylist)

    这是我最近遇到的一个问题 我有一个带有自定义适配器类的列表视图 适配器接受列表视图并用其中的元素填充列表视图 现在 我想在列表视图的每一行上有一个按钮来从中删除项目 我应该如何解决这个问题 有没有办法远程触发活动类中的方法并调用适配器上的n
  • 使用 AppleScript 拆分全屏应用程序

    我一直在使用这个脚本 https gist github com dsummersl 4175461在 Automator 中 它可以在全屏和窗口模式之间切换应用程序 我经常使用分屏应用程序 El Capitan 中引入 那么有什么方法可以
  • 通过添加哈希来防止查询字符串操作?

    为了保护 Web 应用程序免受查询字符串操作的影响 我正在考虑向每个 url 添加一个查询字符串参数 该参数存储所有其他查询字符串参数和值的 SHA1 哈希值 然后根据每个请求的哈希值进行验证 此方法是否提供强大的保护以防止用户操纵查询字符
  • 低通滤波器编程

    我已经用 Java 编写了一个 Sega Master System 模拟器 尽管这个问题不是 Java 特有的 并且已经完成了除 SN76489 声音芯片之外的所有内容 该芯片如何发出声音很简单 我遇到的问题是将其转换为可通过 PC 笔记
  • 使用门户更改 Azure 应用程序设置,无需重新启动

    我有时会这样 在 Azure 门户中 我转到 应用程序服务 然后单击我的 Web 应用程序 然后转到 应用程序设置 在这里 我更改了 应用程序设置 列表中的一个值 例如 我将 128 更改为 129 最后我点击 保存 这会导致我的网络应用程
  • 姜戈·格拉佩利错误

    我对姜戈 格拉佩利有意见 它似乎加载 CSS 得很好 但样式似乎 关闭 也许一些图片可以澄清我的意思 我刚刚遇到了这个 你需要确保 grappelli 出现在之前 django contrib admin in INSTALLED APPS
  • KnockoutJS - 更新视图模型/映射插件

    如何更新完整的 viewModel 在页面加载时 我得到一个模型并使用转换它ko mapping fromJS myObject 到一个视图模型 如果用户单击按钮我想从服务器获取更新的数据 现在我想应用这些更新 如果我使用ko applyB
  • 使用 EnvDTE.ExecuteCommand 以编程方式开始调试特定项目

    我有一个包含多个启动项目的解决方案 我试图每晚自动重新启动其中一个项目 同时将新进程附加到同一个调试器 我能够重新启动该过程 使用Process Start 并将当前调试器附加到其上 但到目前为止它的可靠性还不是很高 并且根据设计 单击 停
  • 是否可以禁用自动完成功能?

    我知道我不应该这样做 但向客户解释您应该通过浏览器进行操作可能会更容易 他们有一台公共计算机和一台以管理员帐户 我正在编写的代码 在计算机上运行的服务器 他们希望人们输入他们的信息 但他们不希望有人按下电子邮件输入框来显示人们的电子邮件地址
  • Chrome 打包应用程序中的 Google Drive Realtime API

    有谁知道如何使用Google 云端硬盘实时 API https developers google com drive realtime application in a Chrome 打包应用程序 https developer chro
  • 什么是 .episode 文件..?

    JAXB 中的 episode 文件是什么 它是由 JAXB 生成的 还是我们操纵的配置文件 以避免 JAXB 重新生成相同的类 Note 我是EclipseLink JAXB MOXy https wiki eclipse org Ecl
  • 如何确保在 Android N 及更高版本上设备重新启动时调用PeriodicWorkRequest

    我最近尝试使用WorkManager s PeriodicWorkRequest这是在后台定期获取用户位置更新的可靠方法 该库满足了我的要求 这个特殊的细节引起了我的注意 即使应用程序或设备重新启动 也能保证任务执行 实现并测试它后 我尝试
  • 在用户窗体中使用类模块变量(需要错误“424”对象)

    我有一个类模块 其中托管有一个 worksheet change 子项 并且在该子项中必须弹出一个用户表单 我想在用户窗体的代码中使用类模块中的许多变量 然而 无论我做什么 我都无法让它发挥作用 我尝试应用该方法这个非常长的指南 https
  • 无法加载非 Laravel Composer 包

    这是我第一次尝试加载不使用 Laravel 服务提供者或外观的 Composer 包 我正在尝试安装这个包 https github com mollie mollie api php https github com mollie mol
  • [GTK]GTK中是否可以实现玻璃/模糊效果?

    我想知道是否有任何小部件可以获得类似 MacOS 的模糊透明背景 深度桌面环境可以模拟this https ibb co bsQRx5在 Qt 的上下文菜单中 Windows 正在慢慢采用这种风格 https www windowscent
  • 用C写入Linux sysfs节点

    我可以从 shell 激活系统上的 LED 如下所示 echo 1 gt sys class leds NAME COLOR LOCATION brightness 我想从 C 程序中执行完全相同的操作 但我无法找到有关如何完成此操作的简单
  • IHostedService 可在 Azure Functions 应用程序中使用吗?

    不管我们是否should 我们可以使用IHostedService在 Azure Functions 应用程序中 这是尝试将托管服务 特别是后台服务 注册为IHostedService internal sealed class Start
  • 如何在Python中检查字符串是否包含列表中的元素

    我有这样的事情 extensionsToCheck pdf doc xls for extension in extensionsToCheck if extension in url string print url string 我想知
  • 从 js 使用 Phonegap 3.0 调用 Activity 方法的最佳方式

    我正在尝试使用 MainActivity 中的本机方法从phonegap 中的index html 拨打电话 我使用的是phonegap 3 0和android 4 3平台 我尝试过第二个答案 https stackoverflow com