Activer le débogage USB sur Android 4.2, 4.3 et 4.4

Je pense que vous avez pu constater que depuis la version 4.2 d’Android, et donc sur les version 4.2, 4.3 et 4.4 (respectivement appelées Jelly Bean et KitKat), le menu « Options pour les développeurs » a disparu du menu des paramètres. Mais ce n’est qu’un menu caché et où il faut effectuer différentes actions avant de le voir apparaitre. Voici la marche à suivre pour enfin retrouver le débogage USB :

  • Allez dans « Paramètres » puis « A propos du téléphone ».
  • Appuyez 7 fois (environ)  sur l’item « Numéro de build » (ou « Numéro de version ») jusqu’à ce que le message « Vous êtes maintenant développeur » apparaisse.
  • Quittez tout et retourner dans les « Paramètres ». Vous allez maintenant voir que l’item « Option pour les développeurs » est apparu.
  • Rendez-vous maintenant dans ce menu pour cocher la case « Débogage USB ».

Source : http://developer.android.com/tools/device.html

Communiquer avec un Webservice

Si comme moi, vous avez beaucoup cherché comment communiquer avec un Webservice depuis une applications Android, cet article est fait pour vous.

Tout d’abord, j’ai récupéré le paquet suivant :LibWebservice
Je l’ai ensuite dé-zippé à la racine du répertoire « src » du projet présent dans mon workspace. Si le projet était ouvert dans votre éditeur Android préféré, il faudra réactualiser ce dernier en appuyant sur la touche « F5 ». Vous devriez maintenant voir apparaitre les nouveaux fichiers dans l’arborescence de votre éditeur.

Il faut créer une classe avec son constructeur prenant comme paramètre l’URL du Webservice.

public class WebService {
    private String URL_globale = "";
    public WebService(String URL)
    {
        this.URL_globale = URL;
    }
}

J’ai ensuite créé une méthode me permettant de tester la connexion avec le WebService. Bien sûr, il faut que la fonction « testConnexion » soit présent dans le Webservice distant et dans notre cas, il faut que cette dernière retourne « OK » si la connexion est correcte.

public boolean tester_la_connexion() throws IOException, XmlPullParserException
{
    final String SOAP_ACTION = "testConnexion";  //Nom de la fonction du Webservice
    final String METHOD_NAME = "testConnexion";  //Nom de la fonction du Webservice
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

    StrictMode.setThreadPolicy(policy);
    // Création de la requête SOAP
    SoapObject request = new SoapObject (NAMESPACE, METHOD_NAME);
    //Ajout de propriété: addProperty(nom de variable, valeur) -> Le nom de la variable vient du Webservice
    request.addProperty("SecureKey", SECURE_KEY);   //Je passe une "secure key" qui permet d'identifier l'application (facultatif)

    //Mise dans l'enveloppe SOAP des données
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope (SoapEnvelope.VER11);
    //Préparation de la requête
    envelope.setOutputSoapObject (request);
    HttpTransportSE androidHttpTransport = new HttpTransportSE (URL_globale);

    androidHttpTransport.debug = false;
    //Envoi de la requête
    androidHttpTransport.call (SOAP_ACTION, envelope); //Envoi au Webservice

    Object soapResult =  envelope.getResponse(); //Récupération du résultat
    if(soapResult.toString().equals("OK"))
    {
       return true;
    }
    else
    {
       return false;
    }
 }

A vous d’adapter cette méthode en fonction de vos besoins et de vos fonctions.

Il ne vous reste plus qu’à instancier la classe « WebService » et vous servir de la fonction « tester_la_connexion »

Afficher des images venant de SQlite ou d’une URL dans une listView

Un problème rencontré lors de mes différents développements à été d’afficher des images provenant d’un champs Blob(SQlite) dans une zone image d’une listView.

Pour se faire, il faut tout d’abord créer une classe que j’appellerai ici « MyViewBinder », en voici donc le code :

import android.graphics.Bitmap;
import android.view.View;
import android.widget.ImageView;
import android.widget.SimpleAdapter.ViewBinder;

public class MyViewBinder implements ViewBinder
{
	public boolean setViewValue(View view, Object data,String textRepresentation)
        {
		if( (view instanceof ImageView) & (data instanceof Bitmap) )
                {
			ImageView iv = (ImageView) view;
			Bitmap bm = (Bitmap) data;
			iv.setImageBitmap(bm);
			return true;
		}
		return false;
	}

}

Il faut ensuite déclarer classiquement un HashMap mais de la façon suivante :

ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>(); //Déclaration de l'ArrayList qui recevra la liste de HashMap
HashMap<String, Object> map; //Déclaration du HashMap
map = new HashMap<String, Object>();

Vous pouvez ensuite y insérer l’image stocker dans un Bitmap de la façon suivante :
Le tout devra donc être dans un boucle pour remplir les différentes case de la listView

image = c.getBlob(3);  //Récupération du Blob
bmp  = BitmapFactory.decodeByteArray(image,0,image.length, null); //Conversion en Bitmap
map.put("img",bmp); //Mettre l'image dans le HashMap
listItem.add(map); //Mettre chaque HashMap dans l'ArrayList

Et enfin, l’affichage de tout cela

SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem,R.layout.affichageitem,
new String[] {"img", "ville", "type","prix","id"}, new int[] {R.id.img, R.id.ville, R.id.type,R.id.prix,R.id.id});
mSchedule.setViewBinder(new MyViewBinder());
listView.setAdapter(mSchedule);

Bien sûr, ce fonctionne marche également très bien pour les images provenant d’URLs externe.

Source : http://www.developpez.net/forums/d1032626/java/general-java/java-mobiles/android/prendre-image-url-afficher-utilisant-listview/

Tester la connexion internet

Vous n’avez jamais eu besoin de tester si votre application peux accéder à internet ou non ?
Eh bien rien de plus simple. Tout d’accord créez une classe classique, j’ai nommé la mienne « ConnexionInternet » dans l’exemple ci-dessous. Voici le code réalisant le test :


import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;

public class ConnexionInternet
{
    public static boolean isConnectedInternet(Activity activity)
    {
        ConnectivityManager connectivityManager = (ConnectivityManager)activity.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        if (networkInfo != null)
        {
            State networkState = networkInfo.getState();
            if (networkState.compareTo(State.CONNECTED) == 0)
            {
                return true;
            }
            else return false;
        }
        else return false;
    }
}

Et enfin, le code pour l’utilisation de la fonction

if(ConnexionInternet.isConnectedInternet(MainActivity.this))
{
    //Je suis connecté à internet
}
else
{
    //Je ne suis pas connecté à internet
}

Définir une animation entre le passage d’une vue à une autre

Pour permettre le changement de l’animation par défaut pour le passage d’une vue à une autre, il faut tout d’abord importer le dossier « anim » présent dans les exemples du SDKd’Android dans le répertoire « res » d’Eclipse (voir image ci-dessous).

On peut alors faire la chose suivant pour définir la transition qui sera utilisée :


package com.AJ.FastAndQuikly;
import android.app.Activity;
import android.os.Bundle;

public class DisplayVue extends Activity
{
    public void onCreate(Bundle savedInstanceState) //A la creation de la vue
    {
        super.onCreate(savedInstanceState);
        overridePendingTransition(R.anim.wave_scale, R.anim.wave_scale);  //Animation
        setContentView(R.layout.jeu); //Afficher la vue portant le nom "jeu"
    }
}

On a donc rajouter l’animation, il est est alors possible de changer celle de l’exemple pour une autre ou de rajouter une animation en ajoutant un fichier XML dans le dossier « anim ».

Source : http://www.41post.com/3368/programming/android-changing-the-animation-between-activities

Faire un bouton qui change de vue

Le changement de vue sous Android est assez complexe pour un débutant comme moi, il faut tout d’abord créer une classe qui aura pour but d’afficher la seconde vue, en voici le code (Fichiers « DisplayVue.java ») :


package com.AJ.FastAndQuikly;
import android.app.Activity;
import android.os.Bundle;

public class DisplayVue extends Activity
{
    public void onCreate(Bundle savedInstanceState) //A la   creation de la vue
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.jeu); //Afficher la vue portant le nom "jeu"
    }
}

Il faut ensuite activer un listener sur le bouton souhaité comme suivant (fichier « FastandQuiklyActivity.java » qui est le fichier principal) :

package com.AJ.FastAndQuikly;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class FastandQuiklyActivity extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);  //Définition de la vue principale
        Button ButtonConnexion = (Button) findViewById(R.id.button1);   //Appel du "button1"
        ButtonConnexion.setOnClickListener(new View.OnClickListener()      //Creation du listener sur ce bouton
        {
            public void onClick(View actuelView)    //au clic sur le bouton
            {
                Intent intent = new Intent(FastandQuiklyActivity.this, DisplayVue.class);  //Lancer l'activité DisplayVue
                startActivity(intent);    //Afficher la vue
            }
        });
    }
}

Attention : ne pas oublier de declarer l’activity « DisplayVue » dans le fichier AndroidManifest.xml

Modifier la couleur de fond

Après avoir pas mal chercher, voici la marche à suivre pour changer la couleur de fond de votre application.

Il faut ajouter dans le fichier main du dossier layout (ou autre selon les résolutions paramétrées) dans la balise <LinearLayout>

 android:background="#0000ff" 

#0000ff correspondant à la couleur désirée, ici un bleu.