如何在 PhoneGap 中获取 IMEI 号码?

Posted

技术标签:

【中文标题】如何在 PhoneGap 中获取 IMEI 号码?【英文标题】:How to get IMEI number in PhoneGap? 【发布时间】:2012-02-03 07:09:03 【问题描述】:

我正在使用 jQuery、javascripthtml 开发一个 PhoneGap android 移动应用程序。我想获得移动IMEI。我已经从Tutorial 尝试过这段代码。

我收到这样的号码:97734a345d234d。 我已使用*#06# 检查我的设备以获取 IMEI 号码。 不知道对不对。

【问题讨论】:

为了确认您的 IMEI,它通常印在电池下方或隐藏的地方(如果有的话,也印在包装盒上)。 @***ed 正如您正确指出的那样,它通常打印在电池下方,因此要阅读它,需要关闭设备并取出电池。使用 OP 提到的*#06# 快速代码是一种更快、更容易的方式。不需要关闭设备。 @***ed 如果您可以提供一些代码以编程方式取出电池并读取打印的 IMEI,那将非常有帮助。 大声笑@你们两个聪明的驴,包括@CodeBling。他的部分问题是:“我不知道这是对还是错”。我只是说他如何确认他从*#06#得到的数字是否准确。 @***ed 哈哈好吧,我认为他的意思是他不确定十六进制数是否正确 - 在我看来,如果转换为十进制数可能是有效的。 *#06# 是一种众所周知的在大多数手机上获取 IMEI 的方法 【参考方案1】:

在扩展 DroidGap 类的类中获取 IMEI 号码并将 imei 号码的值保存在静态成员中,然后从您想要的任何地方访问此静态字段...示例代码在这里

public class MyApp extends DroidGap

    private static String imei; 
    @Override
    public void onCreate(Bundle savedInstanceState)
    
        super.onCreate(savedInstanceState);
        super.loadUrl("file:///android_asset/www/index.html");
        TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        imei=tm.getDeviceId();
    
    static public String getIMEI()
        return imei;
    

// where ever u need imei number use this code

String imei=MyApp.getIMEI();

【讨论】:

太棒了的例子!皮蒂,我只能给你+1。谢谢! @bschandramohan 您需要创建一个通过 JS 调用一些本机代码 (PhoneGap) 的插件,请参阅此链接:tricedesigns.com/2012/03/01/pushing-data-to-a-phonegap-web-view【参考方案2】:

您无法通过 html 或 JavaScript 访问 IMEI。但是您可以编写一个为您读取 IMEI 的应用程序。

只需致电getDeviceId()。不要忘记您需要清单中的READ_PHONE_STATE 权限。

【讨论】:

我已经尝试过这个 getDeviceId()。但是我收到错误为网络状态 1=参考错误:找不到变量 getDeviceId @Priya 链接函数getDeviceId() 返回一个字符串。你写过安卓应用吗?另请注意:You do not instantiate this class directly; instead, you retrieve a reference to an instance through Context.getSystemService(Context.TELEPHONY_SERVICE).【参考方案3】:

您可以编写一个 phonegap 插件来返回您的 IMEI 号码。由于 phonegap 不返回 Android 设备的 imei,它返回一个随机的 64 位数字。

这是一个完整的插件,用于在 phonegap 应用程序中获取真实的 IMEI 号码(请注意,这个插件不是“plugmanable”,但如果按照说明操作它将起作用。我已经在 phonegap 2.9 上测试过。我打算写一个真正的“plugmanable”插件,带有一些phonegap 3.0的设备信息)。

这是从 CordovaPlugin (DeviceInfo.java) 扩展的 java 类:

import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.CordovaPlugin;
import org.json.JSONArray;

import android.content.Context;
import android.telephony.TelephonyManager;
import android.util.Log;

public class DeviceInfo extends CordovaPlugin 

    public DeviceInfo()
    

    public String DeviceImeiNumber()
        TelephonyManager tManager = (TelephonyManager)cordova.getActivity().getSystemService(Context.TELEPHONY_SERVICE);            
        return tManager.getDeviceId();
    

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) 
        if (action.equals("imeiNumber")) 
            callbackContext.success(this.DeviceImeiNumber());
            return true;
         
        else 
            return false;
        
     

然后你需要一个 js 对象,这样你就可以在另一端访问你的插件(deviceinfo.js):

(function( cordova ) 

    function DeviceInfo() 

    DeviceInfo.prototype.imeiNumber = function(win, fail) 
        return cordova.exec(
                function (args)  if(win !== undefined)  win(args);  ,
                function (args)  if(fail !== undefined)  fail(args);  ,
                "DeviceInfo", "imeiNumber", []);
    ;

    if(!window.plugins) 
        window.plugins = ;
    

    if (!window.plugins.DeviceInfo) 
        window.plugins.DeviceInfo = new DeviceInfo();
    

)( window.cordova );

在项目中的 res/xml/config.xml 文件中添加插件,如下所示:

<plugins>
    <plugin name="DeviceInfo" value="com.XXX.XXXXX.DeviceInfo"/>
</plugins>

并在您的 AndroidManifest.xml 中添加 READ_PHONE_STATE 权限:

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

在此之后您需要将您的 deviceinfo.js 文件添加到您的页面中,并且在 deviceready 之后您可以像这样使用您的插件:

plugins.DeviceInfo.imeiNumber(function(imei)
   console.log("imei "+ imei);                   
);

【讨论】:

@UDcreate,很高兴为您提供帮助!【参考方案4】:

我相信这只有在您利用其他一些应用程序记录 IMEI 的情况下才有可能,但我不确定是否有。

假设有一些,理想情况下是系统应用程序,您可以读取日志并解析它们以获取该信息。

祝你好运,成功/失败回帖

【讨论】:

getDeviceId() 也是一个不错的选择,如果它可以与 phonegap 一起使用 我已经尝试过这个 getDeviceId()。但是我收到错误为网络状态 1=参考错误:找不到变量 getDeviceId 那么我认为你唯一的选择是以某种方式实现我在上面的回答中描述的方式。【参考方案5】:

您指向PhoneGap Tutorial version 1.0.0。它很旧,而且缺少很多信息。例如,如果您阅读version 2.1.0 of PhoneGap 的同一页面,您会注意到对device.uuid Quick Example 的评论,据说device.uuid 返回IMEI 号码仅在Tizen 平台的情况下强>。您提到的所有其他平台,包括 Android,都会返回其他东西

您无法在纯 HTML / Javascript(通过 PhoneGap Build 编译的应用程序)中获取设备的 IMEI。要阅读它,您必须在本地构建,仅适用于 Android 平台,并包含一些可以为您完成工作的本机插件——例如 this one。

【讨论】:

【参考方案6】:

您可以使用 Phonegap 中的 “设备”对象。由于 "device" 已分配给窗口对象,因此它隐含在全局范围内,因此您可以在 onDeviceReady 函数中轻松调用它,例如:

var deviceID = device.uuid

请注意,在 Android 上,它会返回一个随机的 64 位整数作为字符串。该整数是在设备第一次启动时生成的。在 BlackBerry 上,它返回设备的 PIN 码。这是一个九位数的唯一整数作为字符串,在 iPhone 上它返回由多个硬件标识创建的哈希值字符串。它保证对每个设备都是唯一的,并且不能与用户帐户绑定。

查看完整示例here

【讨论】:

【参考方案7】:

您可以通过这种方式更改platforms/android/src/org/apache/cordova/device/Device.java中定义的getUuid函数

public String getUuid() 
    //String uuid = Settings.Secure.getString(this.cordova.getActivity().getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
    TelephonyManager tManager = (TelephonyManager)this.cordova.getActivity().getSystemService(Context.TELEPHONY_SERVICE);
    String uuid = tManager.getDeviceId();
    return uuid;

只需注释第一行并添加两个新行。

您还必须添加

import android.content.Context;
import android.telephony.TelephonyManager;

【讨论】:

【参考方案8】:

我为 cordova(仅适用于 Android 设备)创建了一个名为 cordova-plugin-imeigetter 的插件,可以满足您的需求。希望对你有帮助。


安装:

cordova plugin add https://github.com/tomloprod/cordova-plugin-imeigetter.git

用法:

这个插件用一种叫做get的方法导出一个对象:

window.plugins.imeiGetter.get(function(imei)
   console.log(imei);
);

GitHub: https://github.com/tomloprod/cordova-plugin-imeigetter

【讨论】:

以上是关于如何在 PhoneGap 中获取 IMEI 号码?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android 10 或更高版本中获取设备 ID 或 imei 号码

以编程方式从iPhone获取IMEI号码[重复]

如何通过代码编程获取设备的 IMEI/ESN 号码但在 android > 6

如何从双卡手机获取两个 IMEI 号码?

在 React Native 中获取 IMEI 号码

在所有 android 设备中获取多个 imei 号码