Archivos Mensuales: noviembre 2011
Como hacer una copia de seguridad con nandroid-backup
- Seleccionar nandroid
- Seleccionar Backup
Hecho esto tendremos una copia de seguridad con TODOS los datos actuales, en caso de necesitar acudir al SAT hay un tutorial para des-rootear. Este backup se encuentra en /sdcard/clockworkmod/backup con la fecha y hora actuales, se puede renombrar la carpeta (sin que contenga espacios) para reconocerla de forma más cómoda.
- Seleccionar wipe data/factory reset
- Seleccionar wipe cache partition
- Seleccionar nandroid
- Seleccionar Backup
Cómo rootear HTC Desire
Resumen rápido de los pasos importantes
- 2 Pre-Requisitos
- 2.1 Archivos necesarios
- 4 Para versiones con HBOOT desde 0.75.XXX hasta 0.93.XXX
- 4.1 Flashear un Custom Recovery y rootear usando UnrEVOked
- Cualquier problema que pudiera aparecer durante el proceso esta detallado en este tutorial como solucionarlo.
- Se recomienda leerlo por completo como mínimo para introducirse correctamente y no andar perdido.
Información de introducción al rooteo
Vídeo del proceso
Glosario de términos
- Apps2SD/A2SD/A2SD+: Son tres modos diferentes de guardar aplicaciones en la SD.
- Apps2SD: Es el modo nativo introducido a partir de Android 2.2, las aplicaciones tienen que estar preparadas para ello.
- A2SD: Es el modo utilizado en las ROMs cocinadas, se enlaza la ruta /data/app y /data/app-private a una partición en formato ext hecha en la SD. Este modo hace que las aplicaciones se muestren en Android como instaladas en la memoria interna porque se utiliza un enlace simbólico entre carpetas para que realmente se guarde en otro lugar, en lugar de guardarlo en la partición FAT32 para que Android lo reconozca como movido a la SD.
- A2SD+: Es el modo utilizado en las ROMs cocinadas, se enlaza la ruta /data/app, /data/app-private y /data/dalvik-cache a una partición en formato ext hecha en la SD. Este modo hace que las aplicaciones se muestren en Android como instaladas en la memoria interna porque se utiliza un enlace simbólico entre carpetas para que realmente se guarde en otro lugar, en lugar de guardarlo en la partición FAT32 para que Android lo reconozca como movido a la SD.
- Brick: Término inglés que significa Ladrillo, eso solo suele ocurrir si se flashea de forma incorrecta o se daña el SPL, actualmente esto solo puede suceder por dos causas:
- Al intentar realizar S-OFF en una Desire.
- Por que el móvil se quede sin batería o similar en la mitad de un flasheo de la RADIO o HBOOT.
- Debrandear: Término empleado al cambiar la ROM original de operador con cambios propios por la de una versión libre de origen sin personalizar por operadoras.
- Desrootear: Término empleado al flashear una vez rooteado, ya sea utilizando un RUU en formato .exe o .zip (en nuestro caso también conocido por PB99IMG.zip), para flashear TODAS las memorias internas para revertir el proceso de rooteo.
- ext: Formato de sistema de archivos empleado en Sistema Operativos Linux, del que actualmente tenemos 3 versiones: ext2, ext3 y ext4.
- Flashear: Cuando actualizamos o cambiamos de ROM estaremos haciendo un flasheo, es parecido a una instalación desatendida y limpia que se puede hacer desde el propio terminal utilizando un archivo en formato «update.zip«. Un archivo en formato «update.zip» no implica que deba renombrarse a ese nombre, sino que dentro el .zip hay que cumplir una estructura y firmar el archivo para que el recovery lo reconozca como un archivo valido.
- HBOOT: O también conocido como BOOTLOADER, es similar a la BIOS de un PC, aunque no es exactamente lo mismo ya que en estos terminales funciona levemente diferente. En el HBOOT se puede cambiar el S-ON por S-OFF y viceversa de forma temporal (hasta próximo flasheo de este) permitiendo así desbloquear las protecciones impuestas por HTC.
- Modo FASTBOOT: Es un modo especial de arranque al que se accede pulsando ATRAS + POWER. En este modo podemos utilizar el ejecutable fastboot para.
- Modo HBOOT: Es un modo especial de arranque al que se accede pulsando BAJAR VOL + POWER. Este modo es empleado por HTC para flashear sus RUUs, nosotros no podemos hacer nada en el a parte de acceder al «Modo RECOVERY».
- Modo RECOVERY: Es un modo especial de arranque al que se accede desde el «Modo HBOOT» o utilizando aplicaciones como Quick Boot. Este modo es empleado para aplicar actualizaciones por OTA en terminales no rooteados, o para flashear ROMs cocinadas si tenemos un Recovery alternativo.
- NAND: Las populares memorias USB o también llamadas Pendrives, utilizan memorias flash de tipo NAND.
- nandroid: Se trata de unos scripts que podemos utilizar desde el menú de un Recovery no oficial, que permiten hacer un volcado de las memorias internas del terminal a archivos .img (imagen) permitiéndonos así la posibilidad de tener copias de seguridad que podemos restaurar cuando queramos de una ROM completamente funcional y configurada.
- OTA: De las siglas Over The Air que significa «A través del aire«, son actualizaciones oficiales distribuidas de forma automática a través de la red WiFi o 3G.
- RUU: De las siglas Rom Upgrade Utility que significa «utilidad de actualizacion de Rom», Son similares a las OTA, pero en este caso, es un ejecutable que nos actualiza la Rom del móvil conectado por medio del USB al PC al ejecutarlo desde este.
- Recovery: Más detalles aquí. Existen versiones de recovery diferentes, pero en esencia hacen lo mismo. En este modo podemos utilizar adb y escribir en ciertos lugares protegidos como /system.
- ROM: La memoria ROM, (acrónimo en inglés de Read-Only Memory) o memoria de sólo lectura, es un medio de almacenamiento utilizado en ordenadores y dispositivos electrónicos, que permite sólo la lectura de la información y no su borrado, independientemente de la presencia o no de una fuente de energía que la alimente. Los datos almacenados en la ROM no se pueden modificar, o al menos no de manera rápida o fácil. Se utiliza principalmente para contener el firmware (programa que está estrechamente ligado a hardware específico, y es poco probable que requiera actualizaciones frecuentes) u otro contenido vital para el funcionamiento del dispositivo, como los programas que ponen en marcha el ordenador y realizan los diagnósticos. Debido a que su finalidad es contener un firmware especifico por eso se utilizan los términos «flashear ROM», «ROM cocinadas», … porque el resultado es cambiar el contenido de lo que en ella se almacena.
- root: Es el usuario con mayores privilegios en un sistema basado en Linux/UNIX, equivalente al Administrador en Windows.
- rootear: Acción de modificar el sistema con el propósito de acceder al mismo con permisos de Administrador. Actualmente el término se utiliza mucho en referencia al sistema operativo Android en el cual, el usuario que utiliza el dispositivo, no tiene permisos de ROOT (o lo que es lo mismo, permisos de Administrador) por defecto. Se utiliza para poder acceder al sistema en casos de flasheo de ROMS, software que requiere de permisos de Administrador, modificacion de archivos de sistema… etc.
- SAT: Son las siglas de Servicio de Asistencia Técnica, sitio donde reparan los terminales averiados.
- Wipe: Término usado en Android que es un símil de «Hard Reset» en Windows Mobile. Hacer wipe en un terminal Android es dejar el teléfono con la configuración inicial (no confundir con la restauración original de la ROM de fabrica ya que no es lo que hace), perdiendo todos los datos almacenados de usuario. La ejecución de esta orden se realiza mediante una serie de combinaciones de teclas y opciones que se presentan en pantalla. La forma de realización variará dependiendo del modelo de terminal sobre la que se ejecute.
- SPL: Second Program Layout. Como ya se ha comentado en el HBOOT, es similar a la BIOS de un PC, aunque no es exactamente lo mismo ya que en estos terminales funciona levemente diferente. El SPL es la segunda parte que se carga al arrancar el terminal, si este se ve dañado o corrompido, obtenemos un terminal Brickeado.
Preguntas y respuestas frecuentes
¿Qué significa Root?
- Usar ciertas aplicaciones exclusivas (Bluex)
- Crear Backups o copias de seguridad
- Cambiar la frecuencia de la CPU para que vaya más rápido (Overclock) o más despacio (Underclock)
- Hacer capturas de pantalla
- Tethering (utilizar la conexión 3G en tu PC)
- Usar de ciertos programas de PC
- Pero lo más importante es la posibilidad de instalar ROMs cocinadas y temas.
¿Qué consecuencias tiene ser root?
- Posibilidad de recibir actualizaciones automáticas (OTA): Tendrás que apañártelas tu solo si quieres actualizar tu terminal aunque a la velocidad que llegan… tampoco es ningún problema 😀
- Las OTAs son como las ROMs flasheables desde recovery pero que se bajan de forma automática y van en formato parche (no incluyen las apps completas, solo las parchean), pero con la diferencia de que dentro contienen un archivo «firmware.zip» que no es nada más que un «PB99IMG.zip» con otro nombre para flashear desde el recovery original, los custom recovery dan error al flashear este archivo, y en el se incluye el boot, la radio, el hboot y algunas veces alguna cosa más. Por tanto, no probéis a actualizar por OTA una ROM rooteada, porque o bien intentará parchear algo que tenéis diferente o fallará el flasheo del «firmware.zip«, lo que os puede dejar con hardware que no funciona.
- Pérdida de la garantía de tu teléfono: Si has trasteado con él, Vodafone/Movistar/Orange no se hace ya responsable de daños que pueda sufrir. A menos que desrootees y la dejes como el día antes de rootearla, que en el caso de la Desire es posible.
Puede unrevoked3 hacerme root?
Entonces, que es lo que hace?
Entonces este proceso desbloquea permanentemente la NAND del terminal?
Como utilizo otra imagen de un custom recovery aparte del de ClockworMod?
Hay algunos drivers requeridos?
- Apagar la Desire y encenderla con BAJAR VOL+POWER
- Cuando en pantalla muestre HBOOT USB PLUG pulsar POWER
- Si no tenías ningún driver para FASTBOOT:
- Cuando en pantalla se vea FASTBOOT USB PLUG conectarla por USB al PC y cuando detecte el hardware nuevo y pregunte que debe hacer, seleccionar No buscar. Seleccionaré el controlador que se va a instalar e indicarle la ruta donde tenemos descomprimido IncredibleUSBUniversal.zip. Una vez acabado, deberíamos tener instalado el driver sin problemas y preparado para funcionar cuando sea necesario. Ya podemos reiniciar tanto el PC como la Desire.
- Si ya tenías un driver para FASTBOOT:
- Abrir el Administrador de Dispositivos de Windows (Click derecho sobre mi PC -> Propiedades -> Administrador de Dispositivos
- En Otros dispositivos deberías ver un Android 1.0
- Click derecho sobre Android 1.0 y pulsa en Actualizar controlador del dispositivo.
- Se abrirá una ventana y deberás pulsar en Buscar Software del controlador en mi Equipo
- Pulsar en Examinar… y selecciona el directorio donde descomprimiste el IncredibleUSBUniversal.zip, pulsa Aceptar y después Siguiente.
- Verás una barra de progreso indicando que el driver esta siendo instalado. Si sale algún aviso, pulsa Aceptar.
- El driver debería haber sido instalado y te mostrará una imagen Windows ha actualizado el controlador del dispositivo.
- Pulsar Cerrar y asegúrate que Android Bootloader Interface ahora sí aparece bajo Android Phone, en el Administrador de Dispositivos.
- Si no tenías ningún driver para FASTBOOT:
- Reiniciar el PC para que el driver se aplique correctamente.
Estoy en Linux y mi terminal no se detecta!
El programa se queda en «Waiting for the system to settle»
¿Liberaréis el código fuente?
No parece justo! Android es código abierto
He encontrado este software útil, y quiero donar al equipo!
Cómo se que versión de HBOOT tengo?
Cómo activo la depuración USB?
- Pulsar Menú -> Ajustes -> Aplicaciones -> Desarrollo -> Depuración USB
Pre-Requisitos
Archivos necesarios
- Descargar unrevoked (Desaconsejado, mejor usar un Recovery alternativo)
- Recoverys alternativos que pueden ser flasheados, los recoverys mas completos son el RMD y el 4EXT
- Tener un HBOOT compatible (si no sabes que versión de HBOOT tienes, ve al principio del tutorial y lee TODAS las preguntas y respuestas iniciales :P)
MUY IMPORTANTE, LEER CON ATENCIÓN:
Cómo saber si la pantalla es SLCD o AMOLED?
Cómo saber si mi placa es PVT4 y si es 00020000 o 00040000?
- HTC Desire de las primeras remesas españolas:
- Información en el HBOOT:
BRAVO PVT1 SHIP S-OFF
HBOOT-0.93.0001
MICROP-031.d
TOUCH PANEL-SYNT0101
RADIO-5.11.05.27
- Información en ADB:
# adb shell cat /proc/mtd
dev: size erasesize name
mtd0: 000a0000 00020000 "misc"
mtd1: 00480000 00020000 "recovery"
mtd2: 00300000 00020000 "boot"
mtd3: 0fa00000 00020000 "system"
mtd4: 02800000 00020000 "cache"
mtd5: 093a0000 00020000 "userdata"
- HTC Desire de las remesas con PVT4:
- Información en el HBOOT:
BRAVO PVT4 SHIP S-ON
HBOOT-0.93.0001
MICROP-051d
TOUCH PANEL-SYNT0101
RADIO-5.09.05.30_2
- Información en ADB:
# adb shell cat /proc/mtd
dev: size erasesize name
mtd0: 00100000 00040000 "misc"
mtd1: 00480000 00040000 "recovery"
mtd2: 00340000 00040000 "boot"
mtd3: 0fa00000 00040000 "system"
mtd4: 02800000 00040000 "cache"
mtd5: 096c0000 00040000 "userdata"
Cómo soluciono un SLCD-Brick?
Cómo soluciono un USB-Brick?
Para versiones con HBOOT desde 0.75.XXX hasta 0.93.XXX
Flashear un Custom Recovery y rootear usando UnrEVOked
Recoverys disponibles
- Sección con información más concreta por versiones e incluyendo recoveries alternativos
Pasos necesarios para Windows
- Desinstalar HTC Sync del PC (dejando solo el HTC Driver Installer)
- Reiniciar el PC
- Tutorial para la correcta instalación del Driver en Windows usando IncredibleUSBUniversal.zip.
- En la Desire: Menu -> Ajustes -> Aplicaciones -> Desarrollo -> Depuración USB debe estar activada.
- En la Desire: Menu -> Ajustes -> Conectar a PC -> Tipo de conexión predeterminada -> Sólo Cargar y desactivar la opción de Preguntarme
- Ejecutar reflash como administrador, Click derecho -> Ejecutar como Administrador (deberás instalar los drivers para el HBOOT que están en el link anterior)
- Tarda unos segundos en iniciar, hasta que nos muestra esta ventana, con el mensaje Waiting for device. Plug phone in…
- Si se quiere flashear otro recovery, este es el momento de buscarlo desde el menú File -> Custom Recovery, si no se hace esto se flasheara el recovery de ClockworkMod que es el por defecto.
- Conectar la Desire por USB
- Esperar, tardará entre 1-2 minutos (Ir al final de este punto para ver el proceso en imagenes)
- Tu terminal debería estar en modo recovery en pocos segundos!
Pasos necesarios para Linux
- En la Desire: Menu -> Ajustes -> Aplicaciones -> Desarrollo -> Depuración USB debe estar activada.
- En la Desire: Menu -> Ajustes -> Conectar a PC -> Tipo de conexión predeterminada -> Sólo Cargar y desactivar la opción de Preguntarme
- Ejecutar reflash como root:
- Aplicaciones -> Accesorio -> Terminal
- En el terminal escribir: sudo ./reflash (Desde la carpeta donde lo tengas descomprimido. Por ejemplo: cd Descargas o cd Escritorio. Linux diferencia entre minúsculas y mayúsculas)
- Tarda unos segundos en iniciar, hasta que nos muestra esta ventana, con el mensaje Waiting for device. Plug phone in…
- Si se quiere flashear otro recovery, este es el momento de buscarlo desde el menú File -> Custom Recovery, si no se hace esto se flasheara el recovery de ClockworkMod que es el por defecto.
- Conectar la Desire por USB
- Esperar, tardará entre 1-2 minutos (Ir al final de este punto para ver el proceso en imagenes)
- Tu terminal debería estar en modo recovery en pocos segundos!
Pasos necesarios para Mac
- En la Desire: Menu -> Ajustes -> Aplicaciones -> Desarrollo -> Depuración USB debe estar activada.
- En la Desire: Menu -> Ajustes -> Conectar a PC -> Tipo de conexión predeterminada -> Sólo Cargar y desactivar la opción de Preguntarme
- Ejecutar reflash como administrador/root
- En OS X: doble click en el archivo reflash
- Tarda unos segundos en iniciar, hasta que nos muestra esta ventana, con el mensaje Waiting for device. Plug phone in…
- Si se quiere flashear otro recovery, este es el momento de buscarlo desde el menú File -> Custom Recovery, si no se hace esto se flasheara el recovery de ClockworkMod que es el por defecto.
- Conectar la Desire por USB
- Esperar, tardará entre 1-2 minutos (Ir al final de este punto para ver el proceso en imagenes)
- Tu terminal debería estar en modo recovery en pocos segundos!
Fallos conocidos
Error: failed to get root. Is your firmware too new?
- Con la Desire apagada, la encendemos pulsando las BAJAR VOL + POWER, con lo que entraremos en el HBOOT.
- Una vez aquí, seleccionamos RECOVERY (mover con teclas de volumen y aceptar con POWER), y veremos que se queda la pantalla en negro, con la imagen de un móvil y un triángulo rojo. Bien no os asustéis que es normal.
- En la pantalla nombrada en el paso anterior, pulsamos esta vez, la tecla SUBIR VOL + POWER, y veremos como nuestra Desire se va a otra pantalla, esta vez de color azul y con menús.
- En esta pantalla, seleccionamos, la opción de «Wipe data/factory reset«, y dejamos que se reinicie y comience su instalación y configuración, como el primer día que la encendimos.
- Cuando acabe de configurarse, y antes de aceptar ninguna actualización, ejecutamos el unrEVOked como se indica más arriba.
Como hacer una copia de seguridad con nandroid-backup
- Seleccionar nandroid
- Seleccionar Backup
- Seleccionar wipe data/factory reset
- Seleccionar wipe cache partition
- Seleccionar nandroid
- Seleccionar Backup
Capturas de pantalla flasheando Recovery de ClockWorkMod
Capturas de pantalla flasheando Recovery de AmonRA
la alternativa al face, Meebo, msn y taringa chat
Chikencito12Oficial BETA 0.02 Android
Guia Android: Avanzando con la base de datos
Conexión a la base de datos
public class NotasDbAdapter {
// variables varias
...
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {...}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {...}
}
/**
* Constructor - pasa el contexto para poder abrir o crear la DB
*/
public NotasDbAdapter(Context ctx) {...}
/**
* Abre la base de datos de notas. Si no puede abrirla, la crea. Si no se puede
* lanza una excepcion
*/
public NotasDbAdapter open() throws SQLException {...}
public void close() {...}
/**
* Inserta una nueva nota con el t’tulo y el texto dados. Si se crea correctamente
* devuelve el rowId, en caso contrario, devuelve -1 para indicar que ha habido
* un error..
*/
public long createNote(String title, String body) {...}
/**
* Borra la nota con el rowId dado
*/
public boolean deleteNote(long rowId) {...}
/**
* Devuelve un Cursor apuntando a la lista de todas las notas
*/
public Cursor fetchAllNotes() {...}
/**
* Devuelve un Cursor apuntando a la nota con el rowId dado
*/
public Cursor fetchNote(long rowId) throws SQLException {...}
/**
* Actualiza la nota con los detalles dados.
*/
public boolean updateNote(long rowId, String title, String body) {...}
}
Tenemos métodos para crear, actualizar, abrir y cerrar la base de datos. Y luego los métodos CRUD para crear una nueva nota, devolver su información (o la de varias notas), actualizarla y borrarla. Esta clase es muy importante ya que estará en todas vuestras apps de una forma u otra asi que miremos método a método.
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
// sentencia drop
onCreate(db);
}
}
Esta clase auxiliar nos permitirá abrir la base de datos, crearla si no existe y actualizarla al lanzar una nueva versión. La sentencia SQL para crear es:
// sentencia create
private static final String DATABASE_CREATE = "create table notes
(_id integer primary key autoincrement," + "title text not null, body text not null);";
Cómo podéis haber observado ya antes, estamos utilizando la base de datos SQLite, es parecida a MySQL pero tiene pequeños detalles diferentes. Con esto ya tenemos creada la base de datos. Veamos el método para insertar notas:
public long createNote(String title, String body) {
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_TITLE, title);
initialValues.put(KEY_BODY, body);
return mDb.insert(DATABASE_TABLE, null, initialValues);
}
A través de la clase ContentValues guardamos la información con el método put y la insertamos. Para actualizar es casi igual pero usamos el método update en vez de insert. Hay que acordarse de indicar el rowId:
public boolean updateNote(long rowId, String title, String body) {
ContentValues args = new ContentValues();
args.put(KEY_TITLE, title);
args.put(KEY_BODY, body);
return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
}
El método borrar es muy obvio asi que pasamos a recuperar una nota de la base de datos:
public Cursor fetchNote(long rowId) throws SQLException {
Cursor mCursor =
mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
KEY_TITLE, KEY_BODY}, KEY_ROWID + "=" + rowId, null,
null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
Hacemos una query indicando que queremos un array de tres strings con los tres campos que queremos, y con la condición de rowId. El resto de los parámetros se usan si queremos hacer groupBy, having u orderBy. Después comprobamos que no está vacío y si es así movemos el cursor a la primera posición que apunta a la nota que queremos.
Insertando notas
Vamos a modificar el layout de la actividad inicial /res/layout/notepad_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ListView android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/no_notes"/>
</LinearLayout>
Tenemos dos elementos: una lista y un campo de texto. El TextView sólo se muestra si la lista está vacía. Android sabe esto gracias a empty, que está unido al valor de list. A través de android:id="@android:id/list"
indicamos que queremos que esa lista se rellene con los valores de la variable list de la actividad.
Para mostrar la información que aparece en cada fila de la lista necesitamos crear un nuevo template. Creamos un nuevo archivo /src/layout/notes_row.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/text1"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
En el campo de texto (TextView) vamos a mostrar solo el contenido de la variable text1 de la actividad. Antes de ir a la actividad mirad la clase R.java que os dije en el anterior tutorial que Android la manejaba automáticamente. Podéis ver cómo ha añadido el archivo nuevo y la variable text1.
Vayamos ahora con Notas.java, miremos su estructura:
public class Notas extends Activity {
public void onCreate(Bundle savedInstanceState) {...}
public boolean onCreateOptionsMenu(Menu menu) {...}
public boolean onOptionsItemSelected(MenuItem item) {...}
}
onCreate() es el método principal de la actividad donde ejecutaremos todo nuestro código. onCreateOptionsMenu() creará el menú de opciones y onOptionsItemSelected() estará atento a qué botón del menú presionamos para ejecutar la acción correspondiente. Repito que es sólo sobre acciones sobre el menú, las acciones de otros botones o enlaces van en otros métodos, exactamente con Listeners, pero eso ya lo veremos más adelante.
Lo primero que vamos a hacer es convertir a Notas en una actividad de lista, para ellos hacemos que extienda a ListActivity:
public class Notas extends ListActivity
Una combinación de teclas muy útil para arreglar los imports de los paquetes es ctrl-shift-O en Windows o Linux, o cmd-shift-O en el Mac.
Queremos que en la pantalla principal de Notas muestre la lista de notas, para ello tiene que conectarse a la base de datos, coger la información y mostrarla en el layout que hemos hecho antes:
private NotasDbAdapter mDbHelper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.notepad_list);
// new notas
mDbHelper.open();
fillData();
}
Declaramos el objeto fuera para que esté disponible a todos los métodos, fijamos que el layout sea notepad_list (fijaros como referenciamos aquí al layout, no usamos urls o directorios, si no referencia mediante la clase R.java). Vamos a coger la información en un método privado para que quede todo más ordenado:
private void fillData() {
// Recuperamos todas las notas de la DB y creamos una lista Cursor
c = mDbHelper.fetchAllNotes();
startManagingCursor(c);
String[] from = new String[] { NotasDbAdapter.KEY_TITLE };
int[] to = new int[] { R.id.text1 };
/ Y creamos un adaptador array para que vaya mostrando las filas
SimpleCursorAdapter notes =
new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to);
setListAdapter(notes);
}
Ya empezamos a ver más métodos internos de Android, os animo a entrar a la API de Android e ir viendo lo que hacen exactamente, es la mejor forma de aprender. En fillData() recuperamos todas las notas de la DB con el método fetchAllNotes que hicimos al principio, y luego creamos un adaptador que relaciona el campo del objeto que queremos (KEY_TITLE) con la variable text1 (otra vez referenciada por R.java) e indica que queremos que use el layout notes_row.xml que hemos creado antes. Por último avisa a ListActivity que notes va a ser la lista que queremos mostrar.
Con estas modificaciones ya podríamos ver las notas pero no tenemos ninguna asi que vamos a crear la actividad en un momento para que podamos probarlo más a fondo. En Notas.java añadamos el botón de añadir nota. Basta con llamar a la clase superior para crear el menu y añadir el botón de Add Item en la primera posición.
public static final int INSERT_ID = Menu.FIRST;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
boolean result = super.onCreateOptionsMenu(menu);
menu.add(0, INSERT_ID, 0, R.string.menu_insert);
return result;
}
Y añadimos otra variable de texto a strings.xml
<string name="menu_insert">Add Item</string>
Perfecto, ahora hagamos que al hacer click en este nuevo botón ejecute la nueva actividad para mostrar el formulario. Para eso modificamos el método onOptionsItemSelected() también de Notas.java
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case INSERT_ID:
createNote();
return true;
}
return super.onOptionsItemSelected(item);
}
Capturamos el Id de la opción del menú y si es la primera ejecutamos el método createNote(). En un primer paso vamos a hacer que inserte una nota con un título y texto fijos. En el siguiente paso ya crearemos el formulario:
private void createNote() {
String noteName = "Note " + mNoteNumber++;
mDbHelper.createNote(noteName, "");
fillData();
}
La razón de llamar a fillData() de nuevo es para que recargue la lista una vez que se ha terminado de ejecutar el evento de hacer click en la opción del menú Add Item.
Es hora de ver en acción lo que estamos viendo. Comprueba que no hay errores en ningún archivo, arregla los imports y ejecuta como un proyecto de Android. Si das a menu podrás añadir una nota e irás viendo como se crea una nota nueva cada vez que le das. Enhorabuena, hemos conseguido comunicarnos correctamente con la base de datos.
Solución a los Imei inválidos causado por Factory Reset
ESTE TUTORIAL ES PARA RECUPERAR LOS IMEIS DE TU TELEFONO.
Google Android Hidden Secret Codes
DISCLAIMER: This information is intended for experienced users. It is not intended for basic users, hackers, or mobile thieves. Please do not try any of following methods if you are not familiar with mobile phones. We’ll not be responsible for the use or misuse of this information, including loss of data or hardware damage. So use it at your own risk.
*#*#4636#*#*
This code can be used to get some interesting information about your phone and battery. It shows following 4 menus on screen:
- Phone information
- Battery information
- Battery history
- Usage statistics
*#*#7780#*#*
- Google account settings stored in your phone
- System and application data and settings
- Downloaded applications
- Current system software and bundled applications
- SD card files e.g. photos, music files, etc.
*2767*3855#
*#*#34971539#*#*
- Update camera firmware in image (Don’t try this option)
- Update camera firmware in SD card
- Get camera firmware version
- Get firmware update count
*#*#7594#*#*
*#*#273283*255*663282*#*#*
*#*#197328640#*#*
WLAN, GPS and Bluetooth Test Codes:
*#*#8255#*#*
Codes to get Firmware version information:
Codes to launch various Factory Tests:
Tunear tu android tipo Android 4: Ice Cream Sandwich
Go launcher ex https://market.android.com/details?id=com.gau.go.launcherex
Ice Cream Sandwich (theme) https://market.android.com/details?id=kov.theme.ics&feature=search_result
Reloj Ice Cream Sandwich https://market.android.com/detailsid=com.icecreamsandwichclock.clock&feature=search_result
widgetlocker lockscreen http://www.mediafire.com/?g9pz3wma577wssr
PACK TODO EN UNO LOS SAQUE CON EL ROT EXPLORER DESDE MI CELU http://www.mediafire.com/?0492av73cg6mf43