gpt4 book ai didi

javascript - Phonegap 3.0 自定义插件

转载 作者:行者123 更新时间:2023-12-02 18:20:39 25 4
gpt4 key购买 nike

几个月前,我用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 Console(1679): Uncaught TypeError: Cannot call method 'show' of undefined at file:///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>

关于javascript - Phonegap 3.0 自定义插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18860177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com