Как получить номер IMEI в PhoneGap?

Я разрабатываю мобильное приложение Android PhoneGap с помощью jQuery, JavaScript и HTML. Я хочу получить мобильный IMEI. Я пробовал этот код из этого Tutorial.

Я получаю номер следующим образом: 97734a345d234d. Я проверил свое устройство, чтобы получить номер IMEI, используя *#06#. Я не знаю, правильно это или нет.

Ответы

Ответ 1

Извлеките номер IMEI в классе, который расширяет класс DroidGap и сохранит значение номера 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();

Ответ 2

Вы не можете получить доступ к IMEI через html или JavaScript. Но вы можете написать приложение, которое читает IMEI для вас.

Просто позвоните getDeviceId(). Не забывайте, что вам нужно разрешение READ_PHONE_STATE в вашем манифесте.

Ответ 3

Вы можете написать плагин phonegap, чтобы вернуть вам номер IMEI. Поскольку телефонная игра не возвращает imei для устройств Android, она возвращает случайное 64-битное число.

Вот полный плагин, чтобы получить реальный номер IMEI в приложении для телефонных разговоров (обратите внимание, что этот плагин не является "плавным", но если следовать инструкциям, он будет работать. Я протестировал по телефонной таблице 2.9. Я планирую писать настоящий плагиновский плагин с несколькими сведениями об устройстве для телефонной карты 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);                   
});

Ответ 4

Я считаю, что это было бы возможно только в том случае, если вы используете некоторые другие приложения, регистрирующие IMEI, и я не уверен, что если это произойдет.

Предполагая, что некоторые из них, в идеале - системное приложение, вы можете читать журналы и анализировать их для этой информации.

Удачи, верните назад с успехами/неудачами

Ответ 5

Вы указываете на PhoneGap Tutorial версии 1.0.0. Он очень старый, и он много информации. Если вы, например, прочитали ту же страницу для версии 2.1.0 PhoneGap, вы заметите комментарий, сделанный для device.uuid Quick Example, где сказано, что device.uuid возвращает номер IMEI только в случае платформы Tizen. Все другие платформы, в том числе Android, вы упомянули, вернули что-то еще.

Вы не можете получить устройство IMEI в чистом HTML/Javascript (приложение, скомпилированное с помощью сборки PhoneGap). Чтобы прочитать его, вы должны создавать локально, только для платформы Android, и включать в себя некоторый собственный плагин, который будет выполнять эту работу для вас - например, что-то вроде this one.

Ответ 6

Вы можете использовать объект "Устройство" из Phonegap. Поскольку "устройство" назначается объекту window, оно неявно находится в глобальной области видимости, поэтому вы можете легко вызвать его в своей функции onDeviceReady, например:

var deviceID = device.uuid

Обратите внимание, что на Android он возвращает случайное 64-битное целое число в виде строки. Целое число генерируется при первой загрузке устройства. На BlackBerry он возвращает PIN-код устройства. Это девятизначное уникальное целое число в виде строки, а на iPhone оно возвращает строку хэш-значений, созданных с помощью нескольких аппаратных идентификаторов. Это гарантировано для каждого устройства и не может быть привязано к учетной записи пользователя.

Смотрите полный пример здесь

Ответ 7

Вы можете изменить функцию getUuid, определенную в платформах /android/src/org/apache/cordova/device/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;

Ответ 8

Я создал плагин под названием cordova-plugin-imeigetter для cordova (только для Android-устройств), который делает то, что вы хотите. Надеюсь, это поможет вам.


Установка:

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