从 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 方法的最佳方式 的相关文章

随机推荐

  • 有没有办法读取 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