Archive for the ‘ android ’ Category

Android: ScreenShot / ScreenCapture Code

Con estas líneas podemos hacer una captura de pantalla de nuestra aplicación Android. En este ejemplo la captura se guarda en la sdCard.

Del codigo, hay que tener en cuenta que se hace la captura de un View (viewToBeCaptured), que le tenemos que asignar el layout que queramos capturar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.ideaknow.proves;
 
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
 
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
 
public class ScreenCaptureActivity extends Activity {
    private View viewToBeCaptured;
    private Button button;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        button = (Button) findViewById(R.id.button1);
 
        viewToBeCaptured = this.findViewById(R.id.mainView);
        viewToBeCaptured.setDrawingCacheEnabled(true);
        viewToBeCaptured.buildDrawingCache();
 
        button.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View arg0) {
                Log.v("Saved", "Save screenshot?");
                saveFile();
            }
        });
    }
 
    public void saveFile(){
        Bitmap b = viewToBeCaptured.getDrawingCache();
        File sd = Environment.getExternalStorageDirectory();
        File f = new File(sd, "captureAndroid.png");
        try {
            if (sd.canWrite()) {
                Log.v("Saved", "Screenshot saved");
                f.createNewFile();
                OutputStream os = new FileOutputStream(f);
                b.compress(Bitmap.CompressFormat.PNG, 90, os);
                os.close();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        viewToBeCaptured.setDrawingCacheEnabled(false);
    }
}
package com.ideaknow.proves;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class ScreenCaptureActivity extends Activity {
	private View viewToBeCaptured;
	private Button button;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		button = (Button) findViewById(R.id.button1);

		viewToBeCaptured = this.findViewById(R.id.mainView);
		viewToBeCaptured.setDrawingCacheEnabled(true);
		viewToBeCaptured.buildDrawingCache();

		button.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View arg0) {
				Log.v("Saved", "Save screenshot?");
				saveFile();
			}
		});
	}

	public void saveFile(){
		Bitmap b = viewToBeCaptured.getDrawingCache();
		File sd = Environment.getExternalStorageDirectory();
		File f = new File(sd, "captureAndroid.png");
		try {
			if (sd.canWrite()) {
				Log.v("Saved", "Screenshot saved");
				f.createNewFile();
				OutputStream os = new FileOutputStream(f);
				b.compress(Bitmap.CompressFormat.PNG, 90, os);
				os.close();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		viewToBeCaptured.setDrawingCacheEnabled(false);
	}
}

Android: Configure ADB in MAC

Para configurar el adb del sdk de android debemos configurar el path a la instalación de nuestro sdk.

Para hacerlo, debemos abrir un terminal de mac y escribir lo siguiente:

export ANDROID_SDK=/carpeta donde tenemos descargado nuestro sdk/android-sdk-mac_86
export PATH=${PATH}:${ANDROID_SDK}/tools:${ANDROID_SDK}/platform-tools

Una vez echo esto, ya podemos escribir en el terminal adb y el comando deseado (por ejemplo adb logcat).

Hasta aquí hemos configurado el adb, pero para no tener que hacer esto cada vez que encendamos nuestro mac, podemos poner estas dos líneas en el archivo .bash_profile, de esta manera se quedará guardado para un futuro.

Para hacerlo escribimos en un terminal:

nano ~/.bash_profile

Y pegamos las dos líneas que hemos escrito anteriormente.

Android: Create AlertDialog with custom layout

A continuación veremos como crear un AlertDialog personalizado, añandiéndole nuestro propio layout como view.

A continuación el layout que hemos usado:

Android: La Pegatina

Y dos meses más tarde de iPhone (que hemos estado liadillos) os presentamos la aplicación para Android de La Pegatina
https://market.android.com/details?id=com.desctrl.lapegatina&feature=search_result

 

Android: Locale. Get current language

Para detectar el idioma que tiene predefinido un móvil, debemos usar la siguiente línea de código:

Android: Intent with parameters

Cuando desarrollas en Android es muy frecuente usar Intents, para no decir imprescindible. Un intent es una clase que permite especificar una activity a ejecutar.

Algunas veces podemos necesitar pasar parámetros a este intent, y leerlos en la clase de la actividad final.

Para crear un intent y lanzar una actividad debemos hacer:

Si queremos pasarle parámetros, debemos crear un objeto Bundle y asignarselo al intent.
Un Bundle sirve para contener tipos primitivos y objetos de otras clases. Con esta clase podemos pasar datos entre distintas activities.

Hasta aquí ya sabemos como pasar variables. Para leerlas, en la actividad lanzada por el intent, en nuestro caso MiActividad.class, debemos hacer lo siguiente:

Android: Useful libraries

A continuación ponemos algunas librerías interesantes de Android. Si conocéis alguna más no dudéis en decirlo y actualizaremos la lista.

Librerías de utilidades

  • AppMonk (utility): Librería de utilidad para la gestión de la carga, cache y manipulación de imágenes así como clases de ayuda para gestionar operaciones con JSON, Tecto, IO.
  • Droid-Fu (utility): ofrece clases de ayuda para la gestión del ciclo de vida de la aplicación, de Intents, mejora el soporte de tareas en segundo plano, gestión y cacheo de imágenes y mucho más. Esta librería es un trabajo exhaustivo por mejorar ciertas carencias, creado por Matthias Kaeppler que tuve la suerte de conocer en la Droidcon.
  • android-screenshot-library (utility): librería para hacer pantallazos desde tu aplicación sin necesidad de root.
  • android-alarm-database (utility): clase utilizada para pequeñas aplicaciones que usan el sistema de alarmas de Android.
  • OpenIntents (utility): un proyecto común formado por componentes que puedes añadir a tu aplicación dotándola de nuevas funcionalidades por ejemplo: OI AboutOI File ManagerOI SafeOI Update. Además también incluye un par de herramientas para desarrolladores Androidxml2poSensor simulator.
  • ACRA (utility): es una librería que permite a tu aplicación reportar automáticamente los errores que tenga en un formulario de Google.

Leer mas

Android: Open another application

Muchas veces desde nuestra aplicación nos puede interesar llamar a otra aplicación que no sea una por defecto de nuestro teléfono (como lo son google maps, contact list, etc).

Con estas lineas de código podremos abrir cualquier aplicación. En el ejemplo, llamamos a la aplicación que tiene por paquete principal com.desctrl.desctrlApp, y le decimos que la clase que debe llamar es SplashScreen, que en nuestro caso es una SplashScreen. Si la aplicación ya estuviera en ejecución, se abriría, es decir, que no se reiniciaria volviéndonos a mostrar la SplashScreen, nos restauraría su estado.

Android: Check Network Available

Añadiendo esta función a nuestro código podremos comprobar si la conexión a Internet esta disponible o no.

Si la función nos devuelve un true, es que tenemos Internet. Es recomendable usar esta función al inicio de nuestro código siempre y cuando nuestra aplicación necesite internet.

Android: Create AlertDialog

Con las siguientes líneas de código podemos crear una alerta de Android.