如何在PhoneGap中获取IMEI号码?

时间:2012-01-05 12:56:41

标签: android cordova numbers imei

我正在使用jQuery,JavaScript和HTML开发PhoneGap Android移动应用程序。我想获得移动IMEI。我已尝试过此Tutorial的代码。

我得到的数字是这样的: 97734a345d234d 。 我已使用*#06#检查了我的设备以获取IMEI号码。 我不知道它是否正确。

8 个答案:

答案 0 :(得分:5)

获取扩展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 :(得分:4)

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

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

答案 2 :(得分:4)

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

这是一个完整的插件,用于在phonegap应用程序中获取真实的IMEI号码(请注意,此插件不是“可插件”,但如果按照说明操作,它将有效。我已经在phonegap 2.9上进行了测试。我打算写作一个真正的“可插件”插件,带有一些设备信息,适用于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);                   
});

答案 3 :(得分:2)

我相信只有利用IMEI的其他一些应用程序记录,我才能做到这一点,我不确定是否有。

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

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

答案 4 :(得分:2)

你指的是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

答案 5 :(得分:0)

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

var deviceID = device.uuid

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

请参阅完整示例here

答案 6 :(得分:0)

你可以用这种方式改变在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;

答案 7 :(得分:0)

我为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

相关问题