2012-01-05 18 views
14

Estoy desarrollando una aplicación móvil Android PhoneGap usando jQuery, JavaScript y HTML. Quiero obtener el IMEI móvil. He intentado este código desde este Tutorial.¿Cómo obtener el número IMEI en PhoneGap?

Me sale el número así: 97734a345d234d. He comprobado mi dispositivo para obtener el número IMEI usando *#06#. No sé si es correcto o no.

+0

Para confirmar su IMEI, por lo general es impreso debajo de la batería o en algún lugar escondido (y en la caja en la que se produjo en si eso es disponible). – StackOverflowed

+0

@StackOverflowed Como señaló correctamente, por lo general se imprime ** debajo de ** la batería, por lo que para leerlo, es necesario apagar el dispositivo y quitar la batería. El uso del código rápido '* # 06 #', mencionado por OP es mucho más rápido y fácil. No requiere apagar el dispositivo. – trejder

+0

@StackOverflowed sería muy útil si pudiera proporcionar algún código para eliminar la batería mediante programación y leer el IMEI impreso. –

Respuesta

4

No puede acceder al IMEI a través de html o JavaScript. Pero puede escribir una aplicación que lea el IMEI por usted.

Simplemente llame al getDeviceId(). No olvide que necesita el permiso READ_PHONE_STATE en su manifiesto.

+0

He intentado esto getDeviceId(). Pero obtengo el error como estado de la red 1 = Error de referencia: no puedo encontrar una variable getDeviceId – Mercy

+0

@Priya La función enlazada 'getDeviceId()' devuelve una cadena. ¿Has escrito una aplicación para Android? También tenga en cuenta esto: 'No crea una instancia de esta clase directamente; en su lugar, recuperas una referencia a una instancia a través de Context.getSystemService (Context.TELEPHONY_SERVICE) .' – rekire

2

Creo que esto solo sería posible si explotas algunas otras aplicaciones que registran el IMEI y no estoy seguro si hay alguna.

Suponiendo que algunos lo hagan, idealmente una aplicación de sistema, puede leer los registros y analizarlos para obtener esa información.

Buena suerte, después de vuelta con éxitos/fracasos

+0

'getDeviceId()' es una gran opción también, si funciona con phonegap – TryTryAgain

+0

He intentado esto getDeviceId(). Pero estoy obteniendo el error como estado de la red 1 = Error de referencia: no se puede encontrar una variable getDeviceId – Mercy

+0

Entonces creo que su única apuesta es lograr de alguna manera cómo describí en mi respuesta anterior. – TryTryAgain

5

Fetch el número IMEI en la clase que se extiende clase DroidGap y guardar el valor del número IMEI en el miembro estático y luego acceder a este campo estático desde donde quieras. .. código de ejemplo está aquí

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

** Brillante ** ejemplo! Pitty, que solo puedo darte +1. ¡Gracias! – trejder

+0

¿Cómo accedo a MyApp en mi código de JavaScript? – bschandramohan

+0

@bschandramohan necesita crear un complemento que invoque un código nativo (PhoneGap) a través de JS, consulte este enlace: http://www.tricedesigns.com/2012/03/01/pushing-data-to-a-phonegap- web-view/ –

2

Usted está apuntando a PhoneGap Tutorial version 1.0.0. Es muy viejo y tiene mucha información. Si usted, por ejemplo, lee la misma página para version 2.1.0 of PhoneGap, notará un comentario hecho para device.uuid Quick Example, donde se dice que device.uuid devuelve el número IMEI solo en el caso de la plataforma Tizen. Todas las demás plataformas, incluido Android, que mencionó, devuelven algo más.

No se puede obtener el IMEI del dispositivo en HTML/Javascript puro (aplicación compilada a través de PhoneGap Build). Para leerlo, debe compilarlo localmente, solo para la plataforma Android e incluir algún plugin nativo que haga el trabajo por usted; por ejemplo, algo como this one.

0

Puede usar el objeto "Dispositivo" de Phonegap. Desde "dispositivo" se asigna al objeto de ventana, es implícita en el ámbito global para que pueda llamar fácilmente en su función onDeviceReady por ejemplo:

var deviceID = device.uuid 

Tenga en cuenta que en Android devuelve un azar 64- bit entero como una cadena. El entero se genera en el primer arranque del dispositivo. En BlackBerry, devuelve el número PIN del dispositivo. Este es un número entero único de nueve dígitos como una cadena y en iPhone devuelve una cadena de valores hash creados a partir de identificaciones de hardware múltiples. Se garantiza que será único para cada dispositivo y no se puede vincular a la cuenta de usuario.

Véase el ejemplo completo here

4

Se podría escribir un plugin PhoneGap para que devuelva el número IMEI. Como el teléfono no devuelve imei para dispositivos Android, devuelve un número aleatorio de 64 bits.

Aquí hay un complemento completo para obtener el número real de IMEI en una aplicación de teléfono (tenga en cuenta que este complemento no es "conectable" pero si sigue las instrucciones funcionará. Lo he probado en phonegap 2.9. Estoy planeando escribiendo un plugin real "plugmanable" con algunos datos del dispositivo para phonegap 3.0).

Aquí es la clase de Java para que se extiende desde 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; 
     } 
    } 
} 

Y entonces usted necesita un objeto js para que pueda acceder a su complemento en el otro lado (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); 

Añadir su plugin en res/xml/config.xml dentro de su proyecto como este:

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

Y agregar el permiso READ_PHONE_STATE dentro de su AndroidManifest.xml:

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

Después de esto es necesario añadir que deviceinfo.js archivo en su página, y después de la deviceready puede utilizar el plugin de la siguiente manera:

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

funciona a la perfección, ¡gracias! – Udo

+0

@UDcreate, ¡me alegra ayudar! – lao

0

Es posible cambiar la función getUuid definido en plataformas/android/src/org/apache/Córdoba/dispositivo/Device.java de esta manera

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

simplemente comente la primera línea y agregue las dos nuevas.

también hay que añadir

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

He creado un plugin llamado cordova-plugin-imeigetter de Córdoba (sólo para dispositivos Android) que hace lo que quiere. Espero que te ayude.


Instalación:

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

Uso:

Este plugin exporta un objeto con un método llamado get:

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

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

Cuestiones relacionadas