¿Cómo reconocer que CyanogenMod está en un tablero?

He comprobado muchos campos de http://developer.android.com/reference/android/os/Build.html .

Sin embargo no puedo conseguir claramente la información que el uso específico CyanogenMod del dispositivo.

Esto es lo que obtengo:

NETWORK_TYPE="0" SDK_INT="10" CODENAME="REL" INCREMENTAL="eng.android.20110308.014205" RELEASE="2.3.3" SDK="10" Build.BOARD=bravo BOOTLOADER=0.93.0001 BRAND=htc_wwe CPU_ABI=armeabi-v7a CPU_ABI2=armeabi DEVICE=bravo DISPLAY=GRI40 FINGERPRINT=htc_wwe/htc_bravo/bravo/bravo:2.2/FRF91/226611:user/release-keys HARDWARE=bravo HOST=giulio-desktop ID=FRF91 MANUFACTURER=HTC MODEL=HTC Desire PRODUCT=htc_bravo RADIO=unknown TAGS=release-keys TIME=0 TYPE=userdebug USER=android 

 NETWORK_TYPE="0" SDK_INT="10" CODENAME="REL" INCREMENTAL="eng.shade.20110307.195429" RELEASE="2.3.3" SDK="10" Build.BOARD=mahimahi BOOTLOADER=0.35.0017 BRAND=google CPU_ABI=armeabi-v7a CPU_ABI2=armeabi DEVICE=passion DISPLAY=GRI40 FINGERPRINT=google/passion/passion:2.3.3/GRI40/102588:user/release-keys HARDWARE=mahimahi HOST=toxygene ID=GRI40 MANUFACTURER=HTC MODEL=Nexus One PRODUCT=passion RADIO=unknown TAGS=test-keys TIME=0 TYPE=user USER=shade 

PackageManager.hasSystemFeature("com.cyanogenmod.android") será más consistente.

Es mucho más fácil leerlo desde las propiedades del sistema:

 String version = System.getProperty("os.version"); if (version.contains("cyanogenmod")) { isCyanogenMode = true; } 

En mi dispositivo, os.version es 2.6.37.6-cyanogenmod-01509-g8913be8

Alternativamente, también podría confiar en la constante Build.USER , que lleva el nombre de la persona que ensambló la compilación. Para CyanogenMod, esto es a menudo "sombra" (otro apodo de Steve Kondik aka Cyanogen).

También hay una ro.modversion propiedad especial, pero por lo que puedo ver, necesitaría tener acceso a la clase interna SystemProperties para poder leerla de forma programática.

En mi dispositivo System.getProperty("os.version") es algo como 3.0.64-CM-g9d16c8a . Comprobación de cyanogenmod en el número de versión no funciona más. He añadido más detalles en este post .

El siguiente código funcionará. Lo he probado.

 public static boolean isCyanogenMod() { try { return Class.forName("cyanogenmod.os.Build") != null; } catch (Exception ignored) {} return false; } 

La forma más fácil que he encontrado es leer el archivo / proc / version, que contiene información sobre la versión del kernel.

Los teléfonos con cyanogenmod dan algo como:

 Linux version 2.6.37.2-cyanogenmod-01149-g8cdf03e 

Leer este archivo no requiere privilegios de root (runnung uname -r does).

El kernel es intercambiado todo el tiempo por los usuarios finales, por lo que usar System.getProperty ("os.version") o leer desde / proc / version no son buenos indicadores de si el dispositivo está ejecutando cyanogenmod. Permítanme reformular, utilizando sólo aquellos como el indicador no es una buena idea. Deberá utilizar una combinación de métodos. Como @kakopappa indicó en su otro post donde lee os.version y / proc / version, también debería comprobar

 android.os.Build.HOST 

De mi experiencia que ha contenido cyanogenmod en él 9 veces fuera de 10. Sólo para estar seguro que querrá utilizar los otros métodos, así, aunque desde la variable HOST podría ser cambiado a través de build.prop -> ro.build.host

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.