package="com.yourcompany.yourapplication.activitiy"android:versionCode="1"android:versionName="1.0" android:installLocation="auto">
miércoles, 15 de junio de 2011
Controlling Installation Preference
miércoles, 16 de marzo de 2011
Acceder al código fuente de Android
La forma de hacerlo con el IDE Eclipse es instalando un plugin tal y como explican aqui
An easier way of getting the source into your Eclipse installation is to use the "Android Sources" plugin from http://code.google.com/p/adt-addons/ . Haris Peco maintains plugins with gives access to the Android Source code. Using the Eclipse update manager install two of his plugins. Update site: "http://adt-addons.googlecode.com/svn/trunk/source/com.android.ide.eclipse.source.update" and "http://adt-addons.googlecode.com/svn/trunk/binedit/com.android.ide.eclipse.binedit.update".
martes, 1 de marzo de 2011
Buscar información en la Red de Redes.
Uno de los aspectos más importantes en que ha cambiado Internet durante todos estos años, es la forma que tenemos para descubrir cosas nuevas. Antes este lugar lo ocupaba la televisión, las revistas, los periódicos. Desde la llegada de Internet a nuestra cotidianidad, a mediados de los 90s, el descubrir nueva música, películas y expresiones culturales en general, se transformo en una búsqueda activa. En un inexistente mapa del tesoro que se encontraba disperso en Yahoo o Altavista. Hasta que años después, el mensajero cambio de nombre y de algoritmo, y descubríamos las cosas en Google. Nos convertíamos así en cartógrafos, en descubridores, en navegantes. Había que tomar el lápiz para dibujar el camino.
Descubríamos porque buscábamos.
Pero poco a poco fueron apareciendo sitios que buscaban por nosotros. Que seleccionaban y nos regalaban una buena cantidad de recursos. Fue así como Internet se llenó de cartógrafos que nos indicaban un posible camino.
Por otro lado las redes sociales han cambiado el modo en que podemos acceder a la información, que al fin y al cabo la componen las vivencias de todos y cada uno de nosotros.
Estas redes aparecen en diversos contextos, y me sorprende ver el gran apoyo que ha supuesto a la comunicación en las últimas revoluciones de los países Árabes. Donde una población en busca de la libertad, ha podido expresarse libremente y comunicarse por medios como Twitter. Encontrando esa ansiada información, y demostrando como su acceso es vital para un buen funcionamiento global. Poniendo de manifiesto y de forma coherente que la tecnología mejora nuestra vidas.
Es importante encontrar "nuestro camino" y en el caso de Internet lo tenemos a un par de clicks, increíbles guías nos ofrecen sus blogs, tweets, foros, etc. Y nos ayudan a conocer sitios y experiencias que de otro modo serian difícilmente accesibles. Siempre teniendo cuidado de separar la paja, y no dejarnos caer en los grandes "vacíos" de esta ruta trazada cual descubridor de nuevos mundos.
miércoles, 23 de febrero de 2011
Manejo de Hilos en Android
Uno de los mayores quebraderos de cabeza en Android es el manejo de hilos.
No es posible acceder a las variables de la UI desde un hilo diferente del principal. Por tanto si después de realizar una operacion pesada(una comunicacion por red, acceso al GPS...) queremos actualizar un textview, debemos de pasar esa operacion dentro de un runnable al handler de la Activity. El handler es un objeto de la clase Handler, que una vez declarado en la clase principal, en nuestro ejemplo una Activity, permite interactuar con sus variables.
[ . . . ]
// Need handler for callbacks to the UI thread
final Handler mHandler = new Handler();
// Create runnable for posting
final Runnable mUpdateResults = new Runnable() {
public void run() {
updateResultsInUi();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
[ . . . ]
}
protected void startLongRunningOperation() {
// Fire off a thread to do some work that we shouldn't do directly in the UI thread
Thread t = new Thread() {
public void run() {
mResults = doSomethingExpensive();
mHandler.post(mUpdateResults);
}
};
t.start();
}
private void updateResultsInUi() {
// Back in the UI thread -- update our UI elements based on the data in mResults
[ . . . ]
}
}
Otra forma de abordar el problema es mediante el uso de mensajes de nuevo con la clase handler. Como bien indica el SDK de android:
There are two main uses for a Handler: (1) to schedule messages and runnables to be executed as some point in the future; and (2) to enqueue an action to be performed on a different thread than your own.
En este ejemplo tan sencillo, nos interesa utilizar el handler para pasar el control del programa desde el hilo que realiza la operacion en el background a el hilo principal, para que actualice el UI. Es decir, como ya hemos mencionado, no sería posible modificar el UI desde el hilo secundario, sino que tenemos que llamar al hilo principal(mediante el objeto hanlder)para que se ocupe de ello. El siguiente código NO SERIA CORRECTO:
protected void startLongRunningOperation() {
// Fire off a thread to do some work that we shouldn't do directly in the UI thread
Thread t = new Thread() {
public void run() {
mResults = doSomethingExpensive();
updateResultsInUi(); //NO DEBE LLAMARSE AQUI.
}
};
t.start();
}
private void updateResultsInUi() {
//update our UI elements based on the data in mResults
[ . . . ]
}
Como comentaba antes, otro modo de comunicación con el handler es mediante el uso de mensajes, que equivale a hacer un "post(Runnable r)":
public class MyActivity extends Activity {
[ . . . ]
// Need handler for callbacks to the UI thread
final Handler mHandler = new Handler(){ @override public void handleMessage(Message msg){ if(msg.what == 0) updateResultsInUi(); } };
// Create runnable for posting
final Runnable mUpdateResults = new Runnable() {
public void run() {
updateResultsInUi();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
[ . . . ]
}
protected void startLongRunningOperation() {
// Fire off a thread to do some work that we shouldn't do directly in the UI thread
Thread t = new Thread() {
public void run() {
mResults = doSomethingExpensive();
//mHandler.post(mUpdateResults); mHandler.sendMessage(0);
}
};
t.start();
}
private void updateResultsInUi() {
// Back in the UI thread -- update our UI elements based on the data in mResults
[ . . . ]
}
}