Как получить номер IMEI в PhoneGap? - PullRequest
14 голосов
/ 05 января 2012

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

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

Ответы [ 8 ]

5 голосов
/ 25 января 2013

Получите номер 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();
4 голосов
/ 16 августа 2013

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

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

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

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

2 голосов
/ 03 августа 2013

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

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

2 голосов
/ 05 января 2012

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

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

Удачи, вернемся с сообщениями об успехах / неудачах

0 голосов
/ 09 января 2017

Я создал плагин 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

0 голосов
/ 14 апреля 2014

Вы можете изменить функцию 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;
0 голосов
/ 04 августа 2013

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

var deviceID = device.uuid

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

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

...