Búsqueda personalizada

Blog personal para aprender a programar en Android desde cero.

Mostrando entradas con la etiqueta truco. Mostrar todas las entradas
Mostrando entradas con la etiqueta truco. Mostrar todas las entradas

lunes, 15 de marzo de 2010

Hacer capturas con Nexus One en Ubuntu


Por Internet existen muchas páginas con las instrucciones que hay que seguir para poder realizar capturas de pantalla, o debuggar, con tu teléfono. Pero después de seguir las instrucciones de varias páginas, yo no lo conseguía para mi Nexus One y Ubuntu.
Pero por fin he encontrado el cómo y voy a explicarlo (fuente).


  • En un terminal linux ejecutamos lsusb y obtendremos un pantalla del estilo a ésta:



  • Conectamos el N1 al ordenador y lo ponemos en modo Depuración USB. Ajustes -- Aplicaciones -- Desarrollo -- Depuración USB


  • En un terminal de linux volvemos a ejecutar lsusb y podremos que se ha añadido un dispositivo a la lista:
  • Ahora necesitamos crear una regla para nuestro dispositivo. Tenemos que crear un fichero en /etc/udev/rules.d/. Por ejemplo:
  • El contenido del fichero tiene que ser en mi caso (en negrita los valores que vemos con lsusb):
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4e12", MODE="0666"


  • Le damos permisos de acceso y ejecución a ese fichero:
sudo chmod a+rx /etc/udev/rules.d/51.android.rules
  • Recargamos el servicio udev:
sudo service udev reload
  • Ahora si arrancamos el servicio adb vemos que no tenemos permisos (imágen de la fuente):
  • Ahora reiniciamos el servidor. Primero hacemos el kill-server y después (imágen de la fuente):
  • Por último listamos los dispositivos y veremos algo al estilo:

A partir de ahora podremos hacer capturas y debuggar desde Eclipse


O desde Dalvik Debug Monitor que ejecutamos con /tools/ddms:



sábado, 13 de marzo de 2010

Enviar e-mail con datos predefinidos (con Intents)

Puede que desde nuestra aplicación queramos enviar un email, ya sea para que el usuario se ponga en contacto con nosotros, con algún negocio, etcétera. En este post voy explicar como hacerlo con Intents.

// Creamos el Intent pasando un String
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);


// Rellenamos los datos que queremos predefinir
emailIntent.setType("plain/text");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"sergi.bc@gmail.com"});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "DeSBC");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Gracias SBC");


// Empezamos la acción con createChooser
context.startActivity(Intent.createChooser(emailIntent, "Send mail..."));


En la primera línea creamos un Intent al que le pasamos un String con la acción android.content.Intent.ACTION_SEND. Esta acción permite al usuario enviar información a otra persona, aunque todavía no está definido el como.

En las siguientes 4 líneas estamos completando la información que por defecto queremos enviar, para que cada vez que ejecutemos esta acción siempre sea la misma.
El método Intent.putExtra(String, Bundle) añade información extra al Intent. También es posible eliminar información con Intent.removeExtra(String) y recuperar todo el Bundle con Intent.getBundleExtra(String).

En la última línea, con Intent.createChooser(Intent, String), estamos creando un Intent de tipo ACTION_CHOOSER. Se utiliza este método por convención en vez de crearlo de la manera habitual (new Intent(...)). Lo que conseguimos es lanzar una pantalla en la que podemos elegir una Activity, que en nuestro caso será la Activity encarga de enviar el email. Esta puede ser la Activity de gmail o de cualquier otra que sea capaz de enviar emails.





viernes, 12 de marzo de 2010

Guardar preferencias

Cuando queremos que nuestra aplicación tenga unas preferencias o propiedades, tanto fijas o variables, y que se mantengan cada vez que la ejecutamos, podemos almacenar estos valores de varias formas ( Preferences, Files, Databases, y Network)

Quizás la forma más fácil y ligera es con Preferences, que es apropiada para guardar datos de tipo primitivo. La manera de guardar y recoger propiedades es del tipo clave-valor.

Incluso, es posible compartir las preferencias de nuestra aplicación con otras aplicaciones. Aunque si solamente tenemos una aplicación, o no queremos que las preferencias sean compartidas, todavía es más sencillo (el ejemplo que voy a explicar es de este tipo).

El objeto que contiene las propiedades clave-valor es del tipo SharedPreferences, que obtenemos con la llamada Activity.getPreferences(int mode).

Para guardar los cambios de nuestras propiedades usaremos un editor SharedPreferences.Editor, pero para leerlas lo haremos directamente del SharedPreferences.

Vamos con el código de ejemplo (el siguiente código no compila, es solo un trozo de código),

import android.app.Activity;
import android.content.SharedPreferences;

        public class MyActivity extends Activity {

. . .      
// En la primera llamada de la Activity recuperamos el valor de una propiedad llamada "welcomeMessage"
@Override
protected void onCreate(Bundle state){
super.onCreate(state);


                                 // Creamos el objeto SharedPreferences 
SharedPreferences settings = getSharedPreferences(MODE_PRIVATE);
// defaultMessage será el valor por defecto de nuestra propiedad
String defaultMessage = "Hola SBC";
                                // recuperamos el valor de nuestra propiedad 'welcomeMessage'
String welcomeMessage = settings.getString("welcomeMessage", defaultMessage );
myObject.setWelcomeMessage(welcomeMessage);
}


// Guardaremos las opciones en este evento, pero  podríamos hacerlo en cualquier momento
@Override
protected void onStop(){
super.onStop();

// Creamos el objecto SharedPreferences
SharedPreferences settings = getSharedPreferences(MODE_PRIVATE);
                                 // Recuperamos el editor para poder guardar
SharedPreferences.Editor editor = settings.edit();
// Recuperamos el mensaje que hemos introducido
EditText tv = (EditText) findViewById(R.id.message);
String message = tv.toString();
                                // Con el editor le asignamos un valor a nuestra propiedad 'welcomeMessage'
editor.putString("welcomeMessage", message);
      
// El commit IMPORTANTE sobre el editor
editor.commit();
}
}


Como se puede observar es bastante sencillo. Para poder compartir las preferencias con otras aplicaciones es muy similar, pero en vez de llamar a Activity.getPreferences(int mode), deberemos llamar a Context.getSharedPrefences(String my_preferences, int mode), donde mode my_preferences es el nombre identificativo.