2012-01-05 50 views
14

我正在开发一个使用jQuery,JavaScript和HTML的PhoneGap Android移动应用程序。我想获得移动IMEI。我试过这个Tutorial这个代码。如何获取PhoneGap中的IMEI号码?

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

+0

要确认您的IMEI,它通常是在电池下方印刷或隐藏的地方(和包装盒上的它进来,如果这是可用的)。 – StackOverflowed 2012-04-11 20:47:33

+0

@StackOverflowed正如你正确指出的那样,它通常是在**电池下打印**,所以要读取它,需要关闭设备并取出电池。使用'*#06#'快速代码,由OP提出的方式,方式更快,更容易。不需要关闭设备的电源。 – trejder 2013-08-03 16:32:34

+0

@StackOverflowed可以提供一些代码以编程方式删除电池并读取已打印的IMEI,这将非常有用。 – 2014-10-04 21:10:39

回答

4

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

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

+0

我试过这个getDeviceId()但是我的网络状态为错误1 =引用错误:找不到变量getDeviceId – Mercy 2012-01-05 13:19:34

+0

@Priya链接函数'getDeviceId()'返回一个字符串。你写了一个Android应用程序?还要注意这一点:'你不直接实例化这个类。相反,你通过Context.getSystemService(Context.TELEPHONY_SERVICE)获取对实例的引用.' – rekire 2012-01-05 13:22:55

2

我相信这只有在您利用其他一些应用程序登录IMEI时才有可能,我不确定是否有这样做。

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

运气好,回来后与成功/失败

+0

'getDeviceId()'也是一个很好的选择,如果它能与phonegap一起工作 – TryTryAgain 2012-01-05 13:02:49

+0

我试过这个getDeviceId()。得到错误作为网络状态1 =参考错误:找不到变量getDeviceId – Mercy 2012-01-05 13:18:24

+0

然后我认为你唯一的选择是以某种方式实现它,我在上面的答案中描述了它。 – TryTryAgain 2012-01-05 13:19:54

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(); 
+0

**辉煌**例子!皮蒂,我只能给你+1。谢谢! – trejder 2013-08-03 16:33:54

+0

如何在我的JavaScript代码中访问MyApp? – bschandramohan 2014-05-31 11:17:36

+0

@bschandramohan你需要创建一个插件,通过JS调用一些本地代码(PhoneGap),请参阅此链接:http://www.tricedesigns.com/2012/03/01/pushing-data-to-a-phonegap- web-view/ – 2017-01-26 16:54:18

2

您指向PhoneGap Tutorial version 1.0.0。这是非常古老的,它提供了大量的信息。例如,如果您阅读version 2.1.0 of PhoneGap的相同页面,则会注意到针对device.uuid Quick Example发表的评论,其中device.uuid仅在Tizen平台的情况下才返回IMEI号码。您提到的所有其他平台(包括Android)确实会返回别的东西

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

0

您可以使用Phonegap中的“设备”对象。由于“设备”被分配到窗口对象,它是隐含在全球范围内,因此您可以轻松地调用它在你的onDeviceReady的功能,例如:

var deviceID = device.uuid 

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

查看完整的例子here

4

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

这是一个完整的插件,可以在phonegap应用程序中获得真实的IMEI号码(请注意,这个插件不是“可插入的”,但如果按照指示它将工作。编写一个真正的“plugmanable”插件,其中包含一些用于phonegap 3.0的设备信息)。

以下是一个Java类从CordovaPlugin扩展(DeviceInfo.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> 

并添加READ_PHONE_STATE许可,您的AndroidManifest.xml中:

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

这一点,你需要添加你deviceinfo.js文件到您的网页后,和deviceready你可以用你的插件像这样经过:

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

完美地工作,谢谢! – Udo 2014-02-19 01:11:37

+0

@UDcreate,我很乐意提供帮助! – lao 2014-02-20 20:30:59

0

你可以改变在平台/ Android的定义getUuid功能/ SRC /组织/阿帕奇/科尔多瓦/设备/ Device.java这样

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; 
0

我创建了一个用于科尔多瓦(仅适用于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

相关问题