Phonegap 3.0 自定义插件

2024-01-31

几个月前,我用phonegap 2.7为一个应用程序编写了一个插件,它运行得很好。该插件基本上打开用户电话簿并将用户选择的联系人的详细信息返回到我的应用程序。

我最近升级到 Phonegap 3.0,我正在尝试将我的插件转换为 3.0;但是我现在无法让插件工作,因为它都是 3.0....这就是我所拥有的

ContactView.java

src\com\huronasolutions\plugins\ContactView.java

package com.huronasolutions.plugins;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.PluginResult;
import org.apache.cordova.CordovaPlugin;

public class ContactView extends CordovaPlugin {
    private static final int PICK_CONTACT = 1;
    private CallbackContext callback;

    @Override
    public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
        if (action.equals("getContact")) {

            this.callback = callbackContext;
            cordova.getActivity().runOnUiThread(new Runnable() {
                        public void run() {
                    startContactActivity();
                    PluginResult mPlugin = new PluginResult(PluginResult.Status.NO_RESULT);
                    mPlugin.setKeepCallback(true);
                    callbackContext.sendPluginResult(mPlugin);
                    }
            });
            return true;
        }
        return false;
    }

    public void startContactActivity() {
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
        this.cordova.startActivityForResult((CordovaPlugin) this, intent,
                PICK_CONTACT);

    }

    @Override
    public void onActivityResult(int reqCode, int resultCode, Intent data) {
        String name = null;
        String number = null;
        String email = null;
        switch (reqCode) {
        case (PICK_CONTACT):
            if (resultCode == Activity.RESULT_OK) {
                Uri contactData = data.getData();
                Cursor c = this.cordova.getActivity().getContentResolver()
                        .query(contactData, null, null, null, null);
                if (c.moveToFirst()) {
                    String ContactID = c.getString(c
                            .getColumnIndex(ContactsContract.Contacts._ID));
                    String hasPhone = c
                            .getString(c
                                    .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

                    if (Integer.parseInt(hasPhone) == 1) {
                        Cursor phoneCursor = this.cordova
                                .getActivity()
                                .getContentResolver()
                                .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                        null,
                                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                                + "='" + ContactID + "'", null,
                                        null);
                        while (phoneCursor.moveToNext()) {
                            number = phoneCursor
                                    .getString(phoneCursor
                                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        }
                    }
                    // get email address
                    Cursor emailCur = this.cordova
                            .getActivity()
                            .getContentResolver()
                            .query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                                    null,
                                    ContactsContract.CommonDataKinds.Email.CONTACT_ID
                                            + "='" + ContactID + "'", null,
                                    null);
                    while (emailCur.moveToNext()) {
                        // This would allow you get several email addresses
                        // if the email addresses were stored in an array
                        email = emailCur
                                .getString(emailCur
                                        .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                        // String emailType = emailCur.getString(
                        // emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
                    }
                    emailCur.close();

                    name = c.getString(c
                            .getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
                    JSONObject contactObject = new JSONObject();
                    try {
                        contactObject.put("name", name);
                        contactObject.put("phone", number);
                        contactObject.put("email", email);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                    callback.success(contactObject);
                }
            }
            break;
        }
    }
}

ContactView.js

\assets\www\js\android\ContactView.js

cordova.define("com.huronasolutions.plugins.ContactView", function (require, exports, module) {
    var exec = require("cordova/exec");

    var contactView = {
        show: function (successCallback, failCallback) {

            function success(args) {
                if (typeof successCallback === 'function')
                    successCallback(args);
            }

            function fail(args) {
                if (typeof failCallback === 'function')
                    failCallback(args);
            }

            return exec(
                function (args) { success(args); },
                function (args) { fail(args); },
                'ContactView',
                'getContact',
                []);
        }
    }
    module.exports = contactView;

});

我的 index.html 文件的头部有以下内容

<script type="text/javascript" src="js/android/ContactView.js"></script>

当我像这样在代码中调用它时

window.contactView.show(
               function (contact) {
                   success({ "contact": contact, "msg": "success" });
               },
               function (fail) {
                   fail({ "msg": "We were unable to get the contact you selected." });
               }
           );

我在 LogCat 中收到以下错误

*09-17 22:09:24.285:E / Web控制台(1679):未捕获的类型错误:无法调用未定义的方法“show” 文件:///android_asset/www/js/txt2.js:477*

当我这样称呼它时

 contactView.show(
                   function (contact) {
                       success({ "contact": contact, "msg": "success" });
                   },
                   function (fail) {
                       fail({ "msg": "We were unable to get the contact you selected." });
                   }
               );

LogCat 说 contactView 未定义。

有人可以帮忙吗,我想我已经遵循了我可以在网上找到的所有指南。 谢谢


像这样调用你的插件:

cordova.require("com.huronasolutions.plugins.ContactView").show(
 function (contact) {
   success({ "contact": contact, "msg": "success" });
 },
 function (fail) {
   fail({ "msg": "We were unable to get the contact you selected." });
 }
);

另请确保您已在 config.xml 中定义了插件:

<feature name="contactView">
      <param name="android-package" value="com.huronasolutions.plugins.ContactView"/
</feature>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Phonegap 3.0 自定义插件 的相关文章

  • 如何动态突出显示网页上的字符串?

    我想创建带有 url 的页面 例如 http xyzcorp schedules 2015Aug24 Aug28 Jim Hawkins http xyzcorp schedules 2015Aug24 Aug28 Billy Bones
  • 在 AppAuth-Android 中注销

    我有一个用JAVA开发的Android应用程序 对于这个应用程序 我使用的是身份服务器4 https github com IdentityServer IdentityServer4作为我的 STS 一切正常 但我找不到任何注销的实现Ap
  • Ionic Facebook Api 无效密钥哈希

    我无法让我的应用程序允许 Facebook 登录 每次用户尝试登录 Facebook 并使用他们的 FB 验证我的应用程序时 都会出现以下错误 无效的密钥哈希 它们的密钥哈希 xxxxxxxxxx 与任何存储的密钥哈希不匹配 配置您的应用程
  • 使用 JavaScript 生成 PDF 文件

    我正在尝试将 XML 数据从网页转换为 PDF 文件 并且希望能够完全在 JavaScript 中完成此操作 我需要能够绘制文本 图像和简单的形状 我希望能够完全在浏览器中完成此操作 我刚刚写了一个名为jsPDF https github
  • ACCESS_BACKGROUND_LOCATION 不适用于低于 Q (29) 的 Android 版本

    我的应用程序面向 Android API 28 根据文档 https developer android com preview privacy location target android 10 我应该要求ACCESS BACKGROU
  • 有没有办法将变量从 javascript 导入到 sass 或反之亦然?

    我正在制作一个依赖于块概念的 CSS 网格系统 所以我有一个基本文件 例如 max columns 4 block width 220px block height 150px block margin 10px 它被 mixin 使用 m
  • 删除Android所有语言中的字符串

    我有一个包含多个翻译的应用程序 我想删除一些字符串 我怎样才能重构并删除它们一次 例如在默认情况下strings xml文件并自动将删除传播到其他翻译的其他 strings xml 文件 您可以通过 Android Studio 中的 翻译
  • 如何更改自动完成中的结果过滤器?

    我不想进行字面匹配 而是想通过正则表达式选择结果 我可以覆盖自动完成的默认行为来完成此任务还是需要替代结构 有一个内置的方法可以做到这一点 只需提供一个函数source http jqueryui com demos autocomplet
  • JavaScript 测验在提出所有问题之前结束

    我现在正在学习 JavaScript 并且正在创建一个测验 我的测验运行正常 控制台中没有任何错误 但它会跳过问题 有时会在回答所有问题之前结束测验 即使给出正确答案 也会减少时间 我不太确定为什么它会这样做 因为在我看来它的编码是正确的
  • Android:打开和关闭SQLite数据库

    我正在开发Android应用程序 我经常在其中访问本地数据库 该数据库可以从不同的主题访问 因此我遇到了数据库的协调问题 我使用以下open and close method public void open mDb mDbHelper g
  • 为什么将 x 和 y 设置为 0 时 svg 文本会消失?

    我刚刚开始阅读有关svg我提出了以下问题 我正在创建一个简单的svg with a text里面如下图所示 从我的阅读中我了解到x and y of the text标签声明文本在标签内的位置svg space 为什么当我同时设置x and
  • Google 地图 API:忽略 DirectionService 请求中的季节性限制

    我目前正在开发一张地图 其中显示两点之间的最短路线 使用不同的交通工具 我注意到 有时 例如在冬季关闭的道路不会被考虑在内 我发现我可以使用方向服务 下面的代码 忽略高速公路 收费站和渡轮 但我一生都无法弄清楚如何 是否可以忽略季节性限制
  • 如何打开弹出窗口并用父窗口中的数据填充它?

    如何使用 JavaScript jQuery 使用父页面中 JS 变量的数据填充弹出窗口 在我的示例中 我有一个文件名数组 我在父窗口中最多列出五个 如果还有更多 我想提供一个链接来打开弹出窗口并列出数组中的每个帖子 因此 如果我打开一个包
  • 更改Android菜单的背景颜色[重复]

    这个问题在这里已经有答案了 我正在尝试将标准浅灰色更改为浅绿色 似乎没有一个简单的方法可以做到这一点 例如 通过 Android 主题 但我找到了一个解决方法 如本页所述 http tinyurl com 342dgn3 http tiny
  • 尝试在 React 应用程序中连接到 MySQL 数据库时,无法读取未定义的属性(读取“查询”)错误

    我正在尝试连接到 MySQL 数据库并在单击按钮后在 React 应用程序中运行查询 一些它如何给出错误 我当前的代码如下所示 import mysql from mysql function App async function sync
  • Android 中的 Google Places API - 适用于个人用户的 API_KEY

    我已经浏览了与在 Android 应用程序中使用 Places API 相关的 Android 文档和其他博客 到处都建议使用 API KEY 来调用 REST 服务 API KEY 在整个项目 应用程序中都是相同的 每天的请求数限制为 1
  • [cocos2d-x]当我尝试在 Windows 10 中运行“python android-build.py -p 19 cpp-tests”时出现错误

    当我尝试运行命令时python android build p cpp tests 我收到如图所示的错误 在此之前 我收到了另一条关于 Android SDK Tools 版本兼容性的错误消息 所以 我只是将 sdk 版本从 26 0 0
  • 通过powershell运行ADB命令

    所以我尝试通过 powershell 脚本运行一些 ADB 命令 这是我正在尝试做的一个简单示例 adb shell echo in adb shell su root echo you are now root ls cd data da
  • 强制输入数字小数位

    我想强制
  • 异步更新后更新Android Listview

    我正在将 HTTP 调用从同步调用转换为异步调用 由于连接在后台运行 因此当我最初设置列表适配器时 数据不存在 如何在 HTTP 调用后更新列表适配器 我尝试了一些方法 例如在数据发送回之前不设置适配器并再次设置适配器 但没有任何效果 这是

随机推荐

  • 扩展FutureTask,如何处理取消

    我已经延长了FutureTask from java util concurrent提供回调来跟踪提交给任务的执行情况ExecutorService public class StatusTask
  • git 仅在 Gitlab CI 上克隆 LFS 文件的 sha

    我推了 png文件 每个文件大小为 2 MB 并由git lfs 到我的 gitlab com 存储库 比如说repo a 在另一个仓库的 CI 工作中repo b where git lfs安装后 repo a 被克隆 现在我看到所有 p
  • 如何通过 pkg-config 使用 C++ Boost 库?

    我成功编译并安装了最新版本的 Boost 库到我的 Linux 机器上 现在 我希望能够使用 pkg config 来简化提供 GCC 链接参数的过程 由于我懒得手动编码自己的 pc 文件 是否有一个脚本 工具可以自动生成所需的 pc 文件
  • 有什么方法可以使用 exe 文件执行我的 Node js 和 puppeteer 程序吗?

    当我在 CMD 上使用该程序时 该程序在 puppeteer 上运行良好 尽管如此 这是一个漫长的过程 对于任何非技术人员来说也很复杂 我想制作一个 exe 文件来执行我手动执行的任务 以在 CMD 中运行此 node js 文件 正如您首
  • Azure Active Directory 注销或清除本机应用程序的令牌缓存

    我有一个 C Web API REST 服务后端 我为 CMS 网页和 Angular2 应用程序提供服务 这是相关的 Angular 应用程序需要通过后端发送用户名和密码 原始凭据 进行身份验证 后端使用这些向 Azure Active
  • 尽管时间戳是正确的,但 date() 返回错误的日期!

    我的 php 日期函数有一个奇怪的问题 code numDays 8 date strtotime 2010 11 06 for i 1 i lt numDays i thisDay date D d M Y date print this
  • Java HTML 渲染“pt”与“px”大小

    我遇到了在 JLabel 中指定 html 元素宽度的问题 我想我应该在此处的旗杆上运行它 看看是否有人有任何建议 当我使用 px 单位值指定元素的宽度时 结果大小实际上约为 133 而如果我不使用单位或使用 pt 我会得到我指定的确切大小
  • 如何在 Django 中创建对话收件箱

    我有一个Message类有fromUser toUser text and createdAt fields 我想模仿 Whatsapp 或 iMessage 或任何 SMS 收件箱 这意味着我想获取每个对话的最后一条消息 I tried
  • 查找并发、重叠、日期范围的数量

    我有一个多年来一直试图解决的难题 但它完全超出了我的能力范围 我有一个包含 3 列的电子表格 A 列是讲师 ID 号 B 列是他们的课程开始日期 C 列是他们的课程结束日期 每个讲师 ID 都有多个课程 我基本上是想回答这个问题 这位讲师在
  • 独立于平台的资源系统(如 Qt Resource 系统)

    是否有一个类似于 Qt 附带的 C 平台独立资源系统 但没有 Qt 依赖项 我想从我的 C 源代码中访问任意数据 也就是说 不仅是图标 还包括翻译或着色器等 或者某种虚拟文件系统库来访问 例如ZIP 压缩文件或类似文件也能满足我的需要 我为
  • 检查视口中的可见性(puppeteer)

    如何使用 Puppeteer 检查 HTML 元素在视口 可见区域 内是否可见 例如 如果我必须滚动才能看到一个按钮 那么它就不可见 page waitForSelector element visible true page waitFo
  • 正则表达式前瞻、后瞻和原子组

    我在我的正则表达式体内发现了这些东西 但我不知道我可以用它们做什么 有人有例子 以便我可以尝试理解它们是如何工作的吗 positive lookahead negative lookahead lt positive lookbehind
  • 使用 Python Rich 在布局内获取提示

    是否可以使用提示获取用户输入within使用 Python Rich 的布局元素 我的目标是使用 Rich 的 Layout 构建一个具有 4 个窗格的全屏窗口 顶部 3 个包含标题 成分和方法 效果很好 但我希望底部一个包含用户输入的提示
  • Xamarin.Forms 中的透明页面

    我需要能够为 Android 创建透明的 Xamarin Forms 页面 我怎样才能做到这一点真正的页面渲染器 现在它有默认的背景颜色 assembly ExportRenderer typeof MyPage typeof ClearB
  • 如何在 Web 应用程序中使用 java.util.logger?

    我正在尝试在网络应用程序中使用记录器 我添加了 FileHandler 将日志写入文件 现在 我需要在项目中的其他类 servlet 中使用相同的处理程序 以便将所有类的日志写入同一文本文件 我怎样才能实现这个目标 Initialize a
  • VBA 动态范围

    我想知道是否有人可以帮助我 我将下面的代码放在一起 在我的工作簿中创建一个新工作表并应用动态命名范围和页面格式 Sub AllDataNamedRanges Dim rLOB As Range Dim rStaffName As Range
  • keras:如何保存历史对象的训练历史属性

    在 Keras 中 我们可以返回以下输出model fit历史记录如下 history model fit X train y train batch size batch size nb epoch nb epoch validation
  • C++20 前后 std::atomic 的初始化

    考虑以下两行代码 std atomic flag a Since C 20 std atomic flag a ATOMIC FLAG INIT Until C 20 在C 20中 第一行初始化a到清晰的状态 但如果我在 C 17 中使用它
  • 已弃用 - Laravel:如何使用 Carbon 在视图中本地化日期[重复]

    这个问题在这里已经有答案了 我正在尝试本地化Carbon不同语言的视图中的日期到目前为止还没有成功 我从模型中检索日期并将其发送到视图 Route get tables setup function now Date now Europe
  • Phonegap 3.0 自定义插件

    几个月前 我用phonegap 2 7为一个应用程序编写了一个插件 它运行得很好 该插件基本上打开用户电话簿并将用户选择的联系人的详细信息返回到我的应用程序 我最近升级到 Phonegap 3 0 我正在尝试将我的插件转换为 3 0 但是我