【问题标题】:Get the user phone number with cordova / phonegap使用cordova / phonegap 获取用户电话号码
【发布时间】:2014-07-13 10:20:06
【问题描述】:

我已经安装了这个插件:https://github.com/8enmann/TelephoneNumberPlugin/

并将此代码放入我的 angularjs 控制器中:

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

什么也没发生,我的代码坏了...

我看到它是一个比原版更新的叉子,我认为它工作得很好。我犯了一个错误或最新的cordova版本有错误?

【问题讨论】:

    标签: android cordova phone-number


    【解决方案1】:

    您可以尝试在 java 中创建自己的代码并使用 javascript 使用它们。
    例如,我使用此 javascript 代码在我的一个应用程序中获取 IMEI:

    $imei=window.YourActivityName.get_imei();
    

    为此,您需要在您的应用中启用 javascript 并在 Java 中定义函数 get_imei()。

    您的 Java 应该类似于:

    public class YourActivityName extends CordovaActivity 
    {
    .........
    public void onCreate(Bundle savedInstanceState)
    {
     .......
     appView.addJavascriptInterface(this, "YourActivityName");
     super.loadUrl(Config.getStartUrl(), 10000);
     .......
    }
    
    //Define function to return imei in Java:
    @JavascriptInterface
    public String get_imei() {
         TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
        String imei = telephonyManager.getDeviceId();
        return imei;    
    }
    }
    

    您可以将 imei 代码替换为 java 中的以下代码

     //Define function to return Number in Java:
        @JavascriptInterface
        public String get_number() {
    TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
        String mPhoneNumber = tMgr.getLine1Number();
            return mPhoneNumber;    
        }    
    

    所需权限:

    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    

    它对我有用。希望能帮助到你。!

    【讨论】:

    • 你的方法给出了 Uncaught TypeError: Cannot read property 'get_imei' of undefined error
    【解决方案2】:

    看起来这个插件是使用TelephonyManager实现的。

    不幸的是,它不适用于许多设备(尤其是在我测试过的设备上)

    例如:TelephonyManager.getLine1Number() failing?

    【讨论】:

      【解决方案3】:

      你必须添加js代码:

      <script src="cordova.js"></script>
      <script src="scripts/telephonenumber.js"></script>
      

      已编辑:

      我尝试了这些步骤来让它工作:

      1) 我安装了插件,并确定我的项目中的 Plugins 文件夹中有“com.simonmacdonald.telephonenumber”文件夹。

      2) 我在插件文件夹 (com.simonmacdonald.telephonenumber) 的 js 文件中搜索并用“telephonenumber”替换了所有“cordova/plugin/telephonenumber”。

      3) 然后它对我不起作用,我尝试在我的项目中包含“telephonenumber.js”,这个文件可以在 com.simonmacdonald.telephonenumber\www 上找到,所以我将该文件复制到我项目的 scripts 文件夹中,它运行良好。

      4) 现在可以了:

      var telephoneNumber = cordova.require("telephonenumber");
      telephoneNumber.get(function (result) {
          alert(result);
          callback(result); //callback function is called here
      }, function () {
          alert("error");
      });
      

      你应该知道这个插件在某些手机上不起作用,我在华硕 K00E 和 GT-5830 上尝试没有结果,但我在 S7562 和 N7003 上得到结果。

      我认为这个插件并不完美,现在我正在使用客户端发送的短信来获取他们的电话号码......

      【讨论】:

      • 请在您的回答中提供更多信息。那个脚本是什么,你从哪里得到的?等
      【解决方案4】:

      我知道我迟到了。 经过大量搜索后,我发现 this 插件非常适合我... 在您的项目中添加这些插件

      将这些代码放入您的 index.js

      here $(document).ready(function () {
              document.addEventListener("deviceready", onDeviceReady, false);
       });
      
       function onDeviceReady() {
              window.plugins.phonenumber.get(success, failed);
      
              document.addEventListener("backbutton", onBackKeyDown, false);
          }
      
          function success(phonenumber) {
              console.log("My number is " + phonenumber);
          }
      
          function failed(phonenumber) {
              console.log("Error " + phonenumber);
          }
      

      如果您的手机不允许显示电话号码,那么它将进入失败阻止。

      但使用前请注意That 一些供应商不会将电话号码发布到 SIM 卡上。

      您可以在设置->关于手机->状态->SIM卡状态中查看。

      【讨论】:

        猜你喜欢
        • 2015-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多