在phonegap应用程序中安装插件

时间:2013-12-19 14:50:07

标签: android cordova

我想使用this plugin创建一个phonegap应用。我已经完成了创建和添加插件的步骤:

1:我使用phonegap cli创建了这个应用程序: -

phonegap create GetPhone --id "com.phone" --name "GetPhoneApp"

2:进入项目并建立

cd GetPhone
phonegap local build android

3:安装插件

phonegap local plugin add https://github.com/macdonst/TelephoneNumberPlugin

4:将telephonenumber.js移动到www文件夹

5:添加

<script type="text/javascript" charset="utf-8" src="telephonenumber.js"></script>

进入index.html然后在下面添加ondeviceready: -

var telephoneNumber = cordova.require("cordova/plugin/telephonenumber");
        telephoneNumber.get(function(result) {
        alert("result = " + result);
        }, function(error) {
        alert("error = " + error.code);
        });

6:已添加

<plugin name="TelephoneNumber" value="com.simonmacdonald.cordova.plugins.TelephoneNumber"/>

进入www目录中的config.xml。

7:构建

phonegap local build android

8:上传到build.phonegap.com并创建.apk文件。

然后,当我在Android设备上运行此应用程序时,它不会发出任何警报。我采取了什么错误的步骤。我对手机缺口了解得多。谷歌搜索后我创建了这个。我已经看到this tutorial也要添加这个插件。当我在本地构建它时,它不会显示任何错误。但它也没有运行。

请帮我找错。

2 个答案:

答案 0 :(得分:5)

首先,我建议您熟悉标准工具,尤其是adb。这些将允许您提供更多信息,找出真正发生的事情。

浏览guide也很有帮助,因此您可以确定自己知道自己在做什么以及为什么要这样做。看看Android代码的逐步调试。

我还鼓励您从源代码构建Cordova应用程序,而不使用花哨的工具来了解所有组件在何处以及如何组合在一起。您的源代码树令人困惑,您似乎使用了Cordova 3.1和Cordova 2.9的混合物,甚至是Phonegap?您只需要包含cordova.js和您的脚本(本例中为js/script.js),此刻不需要其他任何内容。

在谈到重大问题时已经说过了。

您对get的来电会返回错误。为什么?快速浏览一下插件的源代码:

https://github.com/macdonst/TelephoneNumberPlugin/blob/master/src/com/simonmacdonald/cordova/plugins/TelephoneNumber.java

该插件检索TelephonyManager并尝试调用getLine1Number。正如您所看到的,result != null为false,返回PluginResult.Status.ERROR,这就是您收到错误提示框的原因。

这是手头的核心问题。 TelephonyManager为您的请求返回null。为什么?搜索后你可能会偶然发现:

因此,请转到设置&gt;关于手机&gt;设备上的状态,然后查看“我的电话号码”字段。它是“未知”吗?那么艰难的运气。我的SIM卡没有存储号码,因此我得到的结果与您相同。

另外需要注意的是,至少在Android 4.4上,该方法返回一个空字符串""而不是null,因此在我的Android 2.3.7设备上测试时,我得到了一个{ {1}}因此获得了错误分支。但是在我的Android 4.4.2设备上,我得到了null并获得了成功分支,但显然这个数字是空的。

如果您想尝试,可以使用this pretty advanced guide在模拟器上设置数字。所以,你可以做什么?可能没有使用API​​,如果它没有存储在SIM卡上,甚至Android系统本身也无法获得你的号码。询问用户或发送短信以通过网络服务发现号码也是一种选择。

答案 1 :(得分:1)

除非在触发'deviceready'事件后调用代码,否则上述步骤5将无效。

您需要某种调用才能知道文档何时加载,您可以执行以下任一操作:

<body onload="onLoad()">
<script>
function onLoad() {
    document.addEventListener('deviceready', deviceReady, false);
}
</script>

或(w / jquery):

<script>
$(document).ready(function () {
    document.addEventListener('deviceready', deviceReady, false);
}
</script>

然后创建此函数:

function deviceReady() {
    var telephoneNumber = cordova.require("cordova/plugin/telephonenumber");
    telephoneNumber.get(function(result) {
    alert("result = " + result);
    }, function(error) {
    alert("error = " + error.code);
    });
}

这将确保您的文档已加载,并且可以随时致电。