engine_300

Fiche de rappels sur les fondamentaux d’android08.16.11

Fondamentaux

  • Android OS est un système Linux multi-utilisateurs dans lequel chaque application est un utilisateur différent.
  • Chaque processus a sa propre machine virtuelle pour que le code d’une application soit isolé des autres applications.
  • Il est bien sûr possible de contourner ces limitiations, mais la configuration par défaut est ainsi relativement sécurisée.

Les composants:

Il y a 4 types de composants qui sont des points d’entrée dans l’application. Pas forcemenent pour l’utilisateur, et certains dépendent les uns des autres, mais chacun existe comme une entité et joue un rôle spécifique.

  • L’Activity: représente un écran indépendant
  • Le Service: composant qui fonctionne en arrière plan pour faire des traitements longs. Il ne fournit pas d’IHM
  • Le Content Provider: il gère un ensemble de données partagées. Androi fournit par exemple un content provider qui partage les informations des contacts. Toute application qui en a le droit peut requeter ce content provider.
  • Le Broadcast Receiver: il répond à des annonces faites au travers du système (par exemple quand l’écran est éteind, quand la batterie est faible…). Il ne possède pas d’IHM, mais peut créer des notifications (barre de status).

Chaque application peut démarrer un composant d’une autre application. Une application peut prendre une photo sans avoir à ré-écrire le code de l’application de prise de photo.

Comme chaque application tourne dans un process différent qui ne permet pas l’accès aux autres applications, une application ne peut pas activer directement le composant d’une autre application. Mais le système android peut. Il faut donc envoyer un message au système qui spécifie  l’intention de démarrer un composant particulier.

 Activer les Composants:

3 des 4 composant (ativités, services, et broadcast receivers) sont activé par un message asynchrone appelé “intent”. Les intents lient les composants entre eux au runtime.

Les contents providers sont activés par un ContentResolver au travers des méthodes de l’objet ContentResolver lui-même.

 

Source et Crédit photo: hugo90

 

 

Did you like this? Share it:
Posted by rmthbln under android with No Comments.
icon300

Créer un Logo08.11.11

J’ai appris beaucoup de choses sur GIMP récement pour faire les logos de mes applications (en même temps je partais de zéro…). Je voulais donc partager quelques ressources qui m’ont aidé à prendre en main ce logiciel de traitement d’image.
Le tutoriel sur le site du zero m’a donné les bases.

On trouve de nombreux tutoriel avec google, mais voici celui qui m’a aidé à faire le logo de mon application d’analyse d’empreinte digitales:

Amusez-vous bien!

Did you like this? Share it:
Posted by rmthbln under gimp with No Comments.
android_ tobogan

Impossible de Publier sur Android Market08.09.11

Je publie aujourd’hui ma troisième application pour les téléphones android:
Compatibilité par empreinte

Or quand j’ai voulu uploader le fichier .apk, le formulaire me renvoyait une erreure: “Une erreure inattendue s’est produite, veuillez réessayer plus tard.”

J’ai donc attendu un peu, le temps de déjeuner. Mais à l’heure où je devais faire la sieste je n’arrivais toujours pas à uploader mon apk. Je l’ai reconstruit, et re-reconstruit, j’ai essayé avec d’autre apk que j’avais déjà uploadé… Au comble de mon désespoir je cherche le formulaire de contact pour développeur en détresse sur la plateforme de google, et je tombe sur le forum où je vois que cette erreures revient régulièrement (“An unexpected error occurred. Please try again later.” ).

La solution est de se déconnecter/reconnecter de la plateforme.

Voilà au cas où ca vous arriverait ;)
Crédit photo: michael-reuter

 

Did you like this? Share it:
Posted by rmthbln under android with No Comments.
mouvement_sexy164x300

Detecter les mouvements (Shotgun)08.02.11

Je voulais partager le bout de code sur lequel je me suis appuyé pour detecter le mouvement pour mes applications. Je ne l’ai pas inventé, mais j’ai du faire des petites corrections car certaines méthodes utilisées dans des exemples similaires étaient “deprecated”.
 
Voilà:

public class MyActivity extends Activity implements SensorEventListener{

	private SensorManager sensorMgr;
	private Sensor mAccelerometer;
    	private long lastUpdate = -1;
	private float x, y, z;
	private float last_x, last_y, last_z;
	private static final int SHAKE_THRESHOLD = 350;

	@Override
	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);
		setContentView(R.layout.myLayout);

		startMotionDetection();
	}

	private void startMotionDetection() {
		// start motion detection
		sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
		mAccelerometer = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
		boolean accelSupported = sensorMgr.registerListener(this, mAccelerometer,
			SensorManager.SENSOR_ACCELEROMETER);

		if (!accelSupported) {
		    // on accelerometer on this device
		    sensorMgr.unregisterListener(this);
		}
	}

	protected void onPause() {
		if (sensorMgr != null) {
		    sensorMgr.unregisterListener(this);
		    sensorMgr = null;
	        }
		super.onPause();
	}

	protected void onResume(){
		sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
		sensorMgr.registerListener(this, mAccelerometer,
				SensorManager.SENSOR_ACCELEROMETER);
		super.onResume();
	}

	@Override
	public void onAccuracyChanged(Sensor arg0, int arg1) {
		// TODO Auto-generated method stub
	}

	@Override
	public void onSensorChanged(SensorEvent event) {
		if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
		    long curTime = System.currentTimeMillis();
		    // only allow one update every 100ms.
		    if ((curTime - lastUpdate) > 100) {
			long diffTime = (curTime - lastUpdate);
			lastUpdate = curTime;

			x = event.values[SensorManager.DATA_X];
			y = event.values[SensorManager.DATA_Y];
			z = event.values[SensorManager.DATA_Z];

			float speed = Math.abs(x+y+z - last_x - last_y - last_z)
		                      / diffTime * 10000;
			if (speed > SHAKE_THRESHOLD) {
			    // yes, this is a shake action! Do something about it!
			    //Put your code here

			}
			last_x = x;
			last_y = y;
			last_z = z;
		    }
		}
	}
}

 
En espérant que cela puisse vous aider!
 
Crédit photo: cyber-seb

Did you like this? Share it:
Posted by rmthbln under android with No Comments.
© 2014 Actimust | Template by DemusDesign | WordPress theme by Theme Lab