PhoneGap应用中插件的安装

5

我希望使用这个插件创建一个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:将电话号码.js移动到www文件夹中

5:添加

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

将它添加到ondeviceready下,然后将其转换为index.html:

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文件。

然后我在安卓设备上运行此应用程序时,没有任何警报。 我有做错什么步骤吗? 我对phone gap不是很了解。 在谷歌搜索后,我创建了这个。 我也看了这个教程来添加此插件。 当我本地构建它时,它不显示任何错误。 但它也无法运行。

请帮助我找到错误。


没有警报。我觉得我错了。我的流程是对的吗…… - Ashoka Mondal
你使用的 Cordova 版本是什么?你尝试过直接构建而不是使用 build.phonegap.com 吗? - soulseekah
请发布您的日志输出,我有一种感觉您太早地请求了该数字,并在日志中得到了许多未定义的错误。请查看adb logcat内部。 - soulseekah
我正在使用PhoneGap 3.2.0。 - Ashoka Mondal
我的问题不清楚吗? - Ashoka Mondal
显示剩余9条评论
2个回答

5
首先,我建议您熟悉标准工具,特别是adb。这些工具将使您能够提供更多信息,找出实际发生了什么。
浏览指南也很有帮助,这样您就可以确保自己知道自己在做什么以及为什么要这样做。还要查看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。为什么?在搜索后,您可能会偶然发现:

因此,请在您的设备上导航到“设置”>“关于手机”>“状态”,查看“我的电话号码”字段。它是“未知”的吗?那就太糟糕了。我的SIM卡不存储该号码,所以我得到了与您相同的结果。

另一个需要注意的事情是,在Android 4.4上,该方法返回一个空字符串""而不是null,因此在我的Android 2.3.7设备上进行测试时,我得到了一个null,因此进入了错误分支。但是在我的Android 4.4.2设备上,我得到了""并进入了成功分支,但是该号码显然为空。

如果您想尝试,可以使用this pretty advanced guide在模拟器上设置号码。那么您能做什么呢?可能无法使用API来获取该号码,即使是Android系统本身也无法获取未存储在SIM卡上的号码。询问用户或通过Web服务发送SMS以发现该号码也可能是一种选择。


感谢您回复。正如您所说,“SIM卡不存储号码”,我也在某些SO问题上看到过。因此,在我的代码中有可能能够提供设备号码或者不能。我还考虑了短信验证。这是我的备选方案。所以我不确定在这段代码中是否可以获取设备号码。您的意思是我无法通过任何代码获取手机号码吗? - Ashoka Mondal
是的,那正是我的意思。如果你在设备上导航到“设置”>“关于手机”>“状态”,并查看“My phone number”字段及其“未知”或空白 - 那么甚至Android也无法获取你的电话号码。你将不得不通过其他方式解决这个问题。 - soulseekah

1

除非在触发“deviceready”事件后调用代码,否则上述第5步将无法正常工作。

您需要某种调用来知道文档何时加载,可以选择以下任一方式:

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

或者(带有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);
    });
}

这将确保您的文档已加载并且cordova准备好调用。

谢谢你的帮助。但是我已经尝试过并且之前也分享了我的代码。它们分别是 http://www.4shared.com/zip/XTtY2Sso/GetPhone.html 和 http://www.4shared.com/zip/fOnDiB9Y/GetNumber.html。你能帮我看一下吗? - Ashoka Mondal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接