vendredi 16 janvier 2015

Réalisation du SmsAutoForwarder: S3D

Bienvenue sur mon blog


Laissez vos commentaires dans la section correspondante de cette page

lundi 5 janvier 2015

LES BASES DE DONNEES SOUS ANDROID: SQLITE3

  Les Bases de données sous Android: SQLite3
SQLite est un système de base de donnée natif sous Android, donc pas nécessaire de l'installer. Il est possible de l'utiliser comme une base de données relationnelle dans vos applications. L'avantage par rapport aux PreferedShared est que la base de donnée est faite pour traiter des données structurées. J'écrirais dans la mesure du possible un article sur les PreferedShared. Vous pouvez toujours me rappeller si je vient a oublier. ok bon


Ahh Ahh, notre première application ne doit pas être le fameux hello_word qu'on rencotre partout, à dire vrai c'est vraiment démodé pour notre siècle. 

Nous allons durant ce petit moment écrire une application de gestion des personnes. En effet il s'agit d'une apllication qui va nous permettre d'ajouter une nouvelle personne, de supprimer une personne que nous avons enregistré au préalable et modifier les informations d'une personne et enfin afficher la listes des personnes que nous avons enregistrées.
Ceci étant vous devez avoir les bases en programmation orienté objet et en SQL(Structured Query Language).

Nous allons utilisé les concepts propre à la programmation sous android suivants:
SQLiteOpenHelper: c'est la classe utilitaire qui va permettre gérer la connexion, création, évolution suivant les versions de votre programme d'une base de données.

SQLiteDatabase: c'est la classe qui nous fournit tous le nécessaire pour nos opération d'insertion, de suppression, de modification, bref elle nous permettra de manupuler nos données.  

Ok let's go. Nous allons créer un nouveau projet dans notre IDE c-a-dire notre Android studio et nous lui donnons le nom suivante: PeopleManager.  


Une fois le projet crée , nous avons ceci:

ok. Nous avons là une prévisualisation de notre application sauf que là le hello_word est généré par default( Vous comprenez pourquoi le hello_word ne pouvait pas être notre première application).
La vue que nous avons ici est une prévisualisation du fichier activity_main.xml(la vue) qui est associé à l'activité Main_Activity.java .
Nous avons besoin d'une classe Personne pour l'objet model de notre application, on reviendra sur la vue tout à l'heure.
Voici le code de la classe personne:

package com.example.gasmyr.peoplemanager;
import java.util.Date;
/**
 * Created by gasmyr on 1/5/15.
 */
public class People {
    int people_id;
    String fistname;
    String lastname;
    int age;
    String phone;
    String email;
    String gender;
    /**
     *
     * @param fname
     * @param lname
     * @param age
     * @param phone
     * @param email
     * @param gender
     * @param id
     */
    public People(String fname, String lname,int age, String phone, String email, String gender, int id){
        this.fistname=fname;
        this.lastname=lname;
        this.age=age;
        this.phone=phone;
        this.email=email;
        this.gender=gender;
        this.people_id=id;
    }
    /**
     *
     * @param fname
     * @param lname
     * @param age
     * @param phone
     * @param email
     * @param gender
     */
    public People(String fname, String lname,int age, String phone, String email, String gender){
        this.fistname=fname;
        this.lastname=lname;
        this.age=age;
        this.phone=phone;
        this.email=email;
        this.gender=gender;
    }
    /**
     * ici le constructeur vide
     */
    public People(){
    }
    /**
     *  les setters pour notre classe people
     *
     */
    public void setAge(int age) {
        this.age = age;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public void setFistname(String fistname) {
        this.fistname = fistname;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public void setPeople_id(int people_id) {
        this.people_id = people_id;
    }
    /**
     * les getters pour notre classe people
     */
    public String getEmail() {
        return email;
    }
    public int getAge() {
        return age;
    }
    public int getPeople_id() {
        return people_id;
    }
    public String getFistname() {
        return fistname;
    }
    public String getGender() {
        return gender;
    }
    public String getLastname() {
        return lastname;
    }
    public String getPhone() {
        return phone;
    }

}


  Ok comme c'est facile, nous allons à present crée une nouvelle classe qui étend SQLiteOpenHelper et qui nous permettra de creation la base de donnée et ainsi que sa mise à jour si nécessaire.
Voici son code:

package com.example.gasmyr.peoplemanager;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by gasmyr on 1/5/15.
 */
public class PeopleBdHelper extends SQLiteOpenHelper{

    public static final String DB_NAME = "people.db";
    public static final int DB_VERSION = 1;
    public static final String TABLE_NAME = "people";
    public static final String PEOPLE_ID = "_id";
    public static final String PEOPLE_FIRSTNAME = "firstname";
    public static final String PEOPLE_LASTNAME = "lastname";
    public static final String PEOPLE_AGE = "age";
    public static final String PEOPLE_PHONE = "phone";
    public static final String PEOPLE_EMAIL = "email";
    public static final String PEOPLE_GENDER = "gender";

    public static final String CREATE_TABLE_PERSONNE=" CREATE TABLE "
            + TABLE_NAME + "("
            + PEOPLE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT , "
            + PEOPLE_FIRSTNAME  + " TEXT NOT NULL , "
            + PEOPLE_LASTNAME + " TEXT NOT NULL , "
            + PEOPLE_AGE + " INTEGER NOT NULL , "
            + PEOPLE_PHONE + " TEXT NOT NULL, "
            + PEOPLE_EMAIL + " TEXT NOT NULL," 
            + PEOPLE_GENDER + "TEXT NOT NULL )";

    public PeopleBdHelper(Context context){
        super(context,DB_NAME,null,DB_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase database){
        database.execSQL(CREATE_TABLE_PERSONNE);
    }
    @Override
    public void onUpgrade(SQLiteDatabase database,int oldVersion, int newVersion){
        database.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME + ";" );
        onCreate(database);
    }

}

S'il y'a des incomprehensions faut signaler en laissant un commentaire.
 La suite c'est la classe qui va nous permetre de manipuler nos données (les opérations CRUD), nous allons l' applélée PeopleCrud.java et à l'intérieur nous écrirons les mothodes pour l'ajout d'une personne, la supression, la modification, les listing, l'ouverture de la base de donnée ainsi que sa fermeture. Désolé j'aime pas trop la litérature, on y va:
voici son code :

package com.example.gasmyr.peoplemanager;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by gasmyr on 1/5/15.
 */
public class PeopleCrud {

    public static final String TABLE_NAME = "people";
    public static final String PEOPLE_ID = "_id";
    public static final String PEOPLE_FIRSTNAME = "firstname";
    public static final String PEOPLE_LASTNAME = "lastname";
    public static final String PEOPLE_AGE = "age";
    public static final String PEOPLE_PHONE = "phone";
    public static final String PEOPLE_EMAIL = "email";
    public static final String PEOPLE_GENDER = "gender";

    private SQLiteDatabase database;
    private PeopleBdHelper peopleBdHelper;

    public PeopleCrud(Context context){
        peopleBdHelper=new PeopleBdHelper(context);
    }

    /**
     * ici la methode pour  établir la connexion en lecture et écriture à notre base de donnée
     */
    public void open(){
        database=peopleBdHelper.getWritableDatabase();
    }

    /**
     * ici la methode pour fermer la connection
     */
    public void close(){
        database.close();
    }

    public SQLiteDatabase getDatabase(){
        return database;
    }

    /**
     *  methode pour insérer une personne dans la bd
     * @param people
     * @return
     */
    public long AddPeople(People people){
        ContentValues values=new ContentValues();
        values.put(PEOPLE_FIRSTNAME,people.getFistname());
        values.put(PEOPLE_LASTNAME,people.getLastname());
        values.put(PEOPLE_AGE,people.getAge());
        values.put(PEOPLE_PHONE,people.getPhone());
        values.put(PEOPLE_EMAIL,people.getEmail());
        values.put(PEOPLE_GENDER,people.getGender());
        return  database.insert(TABLE_NAME,null, values);
    }

    public int deletePeople(People people) {
        return database.delete(TABLE_NAME,
                PEOPLE_ID + "=" + String.valueOf(people.getPeople_id()), null);
    }
    public int updatePeople(People people) {
        ContentValues values=new ContentValues();
        values.put(PEOPLE_FIRSTNAME,people.getFistname());
        values.put(PEOPLE_LASTNAME,people.getLastname());
        values.put(PEOPLE_AGE,people.getAge());
        values.put(PEOPLE_PHONE,people.getPhone());
        values.put(PEOPLE_EMAIL,people.getEmail());
        values.put(PEOPLE_GENDER,people.getGender());
        return database.update(TABLE_NAME, values,
                PEOPLE_ID + "=" + String.valueOf(people.getPeople_id()), null);
    }

    public Cursor getAllPeopleAsCusor() {
        String query = "SELECT  * FROM " + TABLE_NAME;
        Cursor cursor = database.rawQuery(query, null);
        return cursor;
    }

    /**
     * cette methode convertir le curseur en list de personne que nous pouvons manipulée.
     * @param cursor
     * @return
     */
    private List<People> CursorToPeople(Cursor cursor) {
        List<People> list = new ArrayList<People>();
        People people;
        if (cursor.moveToFirst()) {
            do {
                people = new People(); // faut voir l'utiliter du constructeur vide ici
                people.setPeople_id(Integer.parseInt(cursor.getString(0)));
                people.setFistname(cursor.getString(1));
                people.setLastname(cursor.getString(2));
                people.setAge(Integer.parseInt(cursor.getString(3)));
                people.setPhone(cursor.getString(4));
                people.setEmail(cursor.getString(5));
                people.setGender(cursor.getString(6));
                list.add(people);
            } while (cursor.moveToNext());
        }
        return list;
    }

}

Ok La suite c'est du côté de la vue. j'ai hate de voir le resultat.

Nous allons designer une vue pour tester la fonctionnalité d'ajout d'une nouvelle personne. Vous savez déjà qu'a chaque activité est associé une vue.  Notre vue d'ajout ressemblera à ceci:

Voici le code source du notre vue(activity_add_people.xml):
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.example.gasmyr.peoplemanager.PeopleAddActivity"
    android:background="@drawable/bg9">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="30dp">
        </LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center">
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:textAlignment="center"
            android:textSize="30dp"
            android:elegantTextHeight="true"
            android:text="@string/add_form"/>
        </LinearLayout>
    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="5dp"
        android:background="@drawable/back2"></LinearLayout>
    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    <TableRow>
        <TextView android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="@string/fname"
            android:textSize="25dp"/>
        <EditText
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/fname"/>
    </TableRow>
        <TableRow>
            <TextView android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text="@string/lname"
                android:textSize="25dp"/>
            <EditText
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/lname"/>
        </TableRow>
        <TableRow>
            <TextView android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text="@string/age"
                android:textSize="25dp"/>
            <EditText
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/age"/>
        </TableRow>
        <TableRow>
            <TextView android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text="@string/phone"
                android:textSize="25dp"/>
            <EditText
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/phone"/>
        </TableRow>
        <TableRow>
            <TextView android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text="@string/email"
                android:textSize="25dp"/>
            <EditText
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/email"/>
        </TableRow>
        <TableRow>
            <TextView android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text="@string/gender"
                android:textSize="25dp"/>
            <RadioGroup>
                <RadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/male"/>
                <RadioButton
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/female"/>
            </RadioGroup>
        </TableRow>

        <LinearLayout android:layout_width="fill_parent"
            android:layout_height="10dp"
            android:background="@drawable/back2"></LinearLayout>
    <LinearLayout android:layout_width="fill_parent">
        <TableLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
            <TableRow>
                <Button android:layout_width="fill_parent"
                    android:text="@string/cancel"
                    android:id="@+id/cancel"/>
                <Button android:layout_width="fill_parent"
                    android:text="@string/save"
                    android:id="@+id/save"/>
            </TableRow>
            </TableLayout>
    </LinearLayout>
    </TableLayout>
</TableLayout>

Nous allons implementé juste la fonctionnalité d'ajout et l'article suivant nous permettra de realiser la fonctionnalité de listing. Nous allons donc placé un écouteur sur le bouton save qui nous permettra de réagir au clic et de recupérer les informations saisies par l'utilisateur.
 voici le coe final de la classe PeopleAddActivity:
package com.example.gasmyr.peoplemanager;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

import org.w3c.dom.Text;

import java.util.ArrayList;
public class PeopleAddActivity extends Activity {
    private RadioGroup genderGroupe;
    private PeopleCrud peopleCrud;
    private ArrayList<People> peopleArrayList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_people_add);
        peopleCrud= new PeopleCrud(getApplicationContext());

        Button save=(Button)findViewById(R.id.save);
        genderGroupe=(RadioGroup)findViewById(R.id.gender);
        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText fname=(EditText)findViewById(R.id.fname);
                EditText lname=(EditText)findViewById(R.id.lname);
                EditText age=(EditText)findViewById(R.id.age);
                EditText phone=(EditText)findViewById(R.id.phone);
                int tel= Integer.parseInt(phone.getText().toString());
                EditText email=(EditText)findViewById(R.id.email);
                RadioButton gender= (RadioButton)findViewById(genderGroupe.getCheckedRadioButtonId());
                People people=new People(fname.getText().toString(),lname.getText().toString(),
                        tel ,phone.getText().toString(),
                        email.getText().toString(),gender.getText().toString());
                peopleCrud.open();
                peopleCrud.AddPeople(people);
            }
        });
        Button cancel=(Button)findViewById(R.id.cancel);
        cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                peopleArrayList=peopleCrud.getAllPeople,
Toast.makeText(getApplicationContext(),
"Taille de la liste" +peopleArrayList.size(),Toast.LENGTH_LONG).show();
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_people_add, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
 Et Voici le résultat sur mon l'émulateur HTC:

Le clic sur le bouton cancel nous affiche la taille de la liste des personnes enregistrées. comme ceci:


C'était bon pour un debut. la prochaine fois nous verrons quelque chose un peu plus complet en respectant les best practices de la programmation sous android. rappelons que le code écrit ici n'est pas très professionnelle  car le but était de montrer comment utiliser les bases de données sous android. Un article sous les Bonnes pratiques en programmation sous android va bientôt surgit ainsi qu'un sesecond sur l'utilisation des Fragments( un concept introduit dans l'API 11 <<Android 3.0>> pour la modularité et la gestion des tailles d'écrans multiples comme les smartphones et les tablettes. ).

Laisser les commentaires si vous avez des incomprehensions, je suis à votre disposition chaque jour. Merci






vendredi 2 janvier 2015

INSTALLATION D'ANDROID STUDIO SOUS LINUX

Installation d'Android studio

Nous continuons ici avec l'installation d'android studio sous linux. Moi ma machine est dotée d'Ubuntu 12.04 LTS et a 4 Giga RAM et 500 Giga comme capacité du Disque Dur.

Vous vous rendez sur le site ici https://developer.android.com/sdk/index.html.



et ici on choisit le fichier à télécharger en fonction de notre plateforme de développement. Moi je vous rappelle que je développe sous linux(Ubuntu 12.04 LTS) et par conséquent moi je choisit Android studio pour linux. Sous Linux c'est un fichier .zip, sous Windows c'est un .exe et sous Mac c'est un .dmg je rappelle que android studio que nous téléchargeons est un pack qui contient l'IDE android studio et le SDK(le kit de developpement).

Une fois le téléchargement terminé, nous creons un reportoire dans dans notre machine (mkdir -p AndroidStudio) et nous déposons le fichier téléchargé à l'intérieur. Nous decompressons ensuite le fichier à l'aide de la commande unzip puisqu'il s'agit d'un .zip (unzip android-studio-ide-135.1641136-linux.zip). 
Nous obtenons la structure suivante:



En ligne de commande, je me deplace dans le sous dossier bin/ du dossier decompressé(cd AndroidStudio/android-studio/bin/ ) et j'excecute le fichier studio.sh (./studio.sh). Cette phase nécessite la connexion internet. Android studio se lance et télécharge le SDK, l'API Google et d'autres outils indispensables( il faut être patient parceque cette phase qui est la dernière de l'installation prend un peu de temps et ceci en fonction de votre connexion internet). j'utilise une connexion Camtel 256/128 et j'ai fait pratiquement 2 heures de temps à attendre. Mais après cette longue attente(la pluie) c'est le beau temps, une interface très intuitive et légère et plein de fonctionnalités, euh.




Ehh ehh, faut pas avoir peut du code qui est présent sur l'image ci-dessus, d'ici peut vous allez pouvoir faire mieux. tout à l'heure nous sommes allez dans la /bin pour pouvoir lancé android studio mais que c'est pénible. Pour ne plus avoir à faire tous ces manips nous allons ajouté android-studio/bin/ au PATH.
La commande que moi j'ai utilisée est la suivante: sudo PATH=/android-studio/bin:$PATH et le tour est joué. Désormais nous n'avons qu'a ouvrir un terminal et taper ceci: studio.sh Comme c'est cool.

Nous avons ainsi finit avec l'installation d'Android studio sous linux et plus précisement sous Ubuntu 12.04 LTS. La procédure est la même pour tous système linux.

L'article suivant est intitulé:Notre première application sous Android.

jeudi 1 janvier 2015

INTRODUCTION À ANDROID


                                 

C'est quoi Android?

Android est un système d'exploitation mobiles pour smart phones, tablettes tactiles, terminaux mobiles, smartwatches. Il est open source, c-à-dire que son code source est ouvert et par conséquent vous pouvez par exemple personnalisé une version à vous.
Ce système d'exploitation est basé sur le noyaux linux et est composé de:

           1- Un noyaux linux et avec les pilotes;
        2- Les bibliothèques logicielles(SQLite que nous utiliserons par la suite pour une basée de donnée embarguée dans le telephone);
        3- Une machine Virtuelle(Dalvik) mais avec la sortie de la version 5.0 une nouvelle machine virtuelle a vue le jour, il s'agit de l'ART;
        4- Un framework: il s'agit du kit de developpement c'est le notre outil de travail;
           5- Un tas d'applications standards( Contacts, SMS, Carnets et autres).


 Et la programmation sous Android?

Programmer sous android c'est écrire des applications pour terminaux mobiles, il s'agit en occurences des applications qui fonctionneront sous des smartsphones, des tablettes,les  montres connecté(smartwatches), les voitures et la télévision.

Sur ce blog nous allons nous nous attarderons sur l'écriture des applications pour smartphones et tablettes.

Pour programmer sous android vous n'avez pas besoin d'avoir des connaissances poussées en java, mais il est toutesfois recommandé en ce qui concerne ce blog d'avoir les bases en programmation orienté objet.

Exemple de tablette sous Android

Exemple de telephone sous Android
Vous avez là deux images qui representent une tablette minu d'un système android et un telephone sous android.

Que faut-il pour développer sous android?

Le langage utilisé pour écrire des applications android est le java. Le développeur à le choix entre les IDE majeurs suivants:
  • Eclipse+ADT
  • Android Studio( le "new tool" pour le développement sous android).
  • NetBeans
Sur ce blog nous utiliserons Android studio comme notre outil de développement et dont voici une interface de démarrage:
android studio

Beaucoup se posent la question suivante:Pourquoi Android Studio et Pas Eclipse?

Et bien, Android studio est le premier IDE( Environnement de Développement Intégré) dédié au développement sous android. Il a été annoncé par Google lors du Google I/O 2013
Il y'a Monsieur Arnaud qui à publier un article portant sur la comparaison d'eclipse à Android studio. Vous y trouverez tous le nécessaire pour comprendre pourquoi j'ai porte mon chois sur Android studio. Il s'agit de Android studio face à Eclipse.

La suite c'est l'Installation d'Android studio sous linux.