Affichage des articles dont le libellé est Android. Afficher tous les articles
Affichage des articles dont le libellé est Android. Afficher tous les articles

dimanche 24 juin 2012

lundi 18 juin 2012

Les notifications sous Android

Le but de ce tutoriel est d’apprendre à utiliser les notifications sous Android et de prévenir les utilisateurs de vos applications d’un événement particulier ou interagir avec eux.
                                                           


Qu’est qu’une notification ?

Une notification est une indication qui s’affiche sur la barre qui se situe en haut d’un téléphone Android. Cette notification sert à prévenir un utilisateur de certains évènements, comme la récéption d’un message par exemple.
Nous allons créer un projet qui comprendra deux boutons :
  • Un pour créer une notification
  • Un autre pour en supprimer
Commençons par créer un projet avec les données suivantes :
  • Nom du projet : tuto_notification
  • SDK : 2.1
  • Nom de l’application : Tuto Notification
  • Nom du package : com.tutos.android.notification
  • Activité : TutoNotificationHomeActivity

Création de la vue principale

Nous allons modifier le fichier “main.xml” afin d’avoir deux boutons.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 
 android:layout_width="fill_parent";  android:layout_height="fill_parent"
    >
<Button
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="@string/add_notification"
 android:id="@+id/add_notification"
    />
<Button
android:layout_width="fill_parent"      android:layout_height="wrap_content"
android:text="@string/delete_notification"
android:id="@+id/delete_notification"
    />
</LinearLayout>




Le fichier “strings.xml” pour rajouter les différentes strings pour le texte des boutons

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="add_notification">Ajouter une 
notification</string>
<string name="delete_notification">Supprimer une notification</string>
    <string name="app_name">Tuto Notification</string>
</resources>


Voici le résultat que vous allez obtenir.


                                                            

Rajouter le Listener sur les boutons

Nous allons rajouter des “Listener” sur les boutons pour gérer le clique. Ce qui donnera sur la classe “TutoNotificationHomeActivity”
package com.tutos.android.notification;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class TutoNotificationHomeActivity extends Activity {
private Button addNotificationBtn;
private Button deleteNotificationBtn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
addNotificationBtn = (Button) findViewById(R.id.add_notification);
addNotificationBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(getBaseContext(), "Ajout d'une notification", Toast.LENGTH_SHORT).show();
}
});
deleteNotificationBtn = (Button) findViewById(R.id.delete_notification);
deleteNotificationBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(getBaseContext(), "Suppression d'une notification", Toast.LENGTH_SHORT).show();
}
});
}
}

Création d’une notification.

Nous allons créer une méthode “createNotification” qu’on appelera au clique sur le bouton “Ajouter une notification”. Voici a quoi ressemble cette méthode :
private final void createNotification(){
   //Récupération du notification Manager
       final NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
       //Création de la notification avec spécification de l'icone de la notification et le texte qui apparait à la création de la notfication
       final Notification notification = new Notification(R.drawable.notification, notificationTitle, System.currentTimeMillis()); 
       //Definition de la redirection au moment du clique sur la notification. Dans notre cas la notification redirige vers notre application
       final PendingIntent pendingIntent = PendingIntent.getActivity(this0new Intent(this, TutoNotificationHomeActivity.class), 0);
       //Récupération du titre et description de la notfication
       final String notificationTitle = getResources().getString(R.string.notification_title);
       final String notificationDesc = getResources().getString(R.string.notification_desc);        
       //Notification & Vibration
       notification.setLatestEventInfo(this, notificationTitle, notificationDesc, pendingIntent);
       notification.vibrate = new long[] {0,200,100,200,100,200};
       notificationManager.notify(NOTIFICATION_ID, notification);
   }
Je vous met l’icone que j’ai utilisé pour la notifcation http://www.tutos-android.com/wp-content/uploads/2011/06/notification.png .




Il suffit maintenant d’appeler la méthode dans votre code, ce qui donnera :

addNotificationBtn = (Button) findViewById(R.id.add_notification;
addNotificationBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
createNotification();
}
});







Il faut rajouter la permission “Vibration” dans l’AndroidManifest.xml
<uses-permission android:name="android.permission.VIBRATE" />
et les nouveaux textes dans le fichier “Strings.xml”
<string name="notification">Notification www.tutos-
android.com</string>
<string name="notification_title">Ma premiere notification 
www.tutos-android.com</string>
<string name="notification_desc">Cliquez sur moi je suis une notification</string>
                                                          

                                                          

Suppression d’une notification

Nous allons créer une méthode “deleteNotification”, pour supprimer notre notification depuis l’application.

private void deleteNotification(){
       final NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
       //la suppression de la notification se fait grâce a son ID
       notificationManager.cancel(NOTIFICATION_ID);
   }
Puis l’appeler dans le code Java au moment du clique
deleteNotificationBtn = (Button) findViewById(R.id.delete_notification);
 deleteNotificationBtn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
        deleteNotification();
        }
    });

Conclusion

En espérant que cet tutoriel vous aura aidé à comprendre comment fonctionne les notifications sous Android.
Share:

mardi 12 juin 2012

Gestion de la rotation sous Android

Le but de ce tutoriel est d’expliquer comment gérer la rotation de l’écran dans vos applications Android.

Philosophie de la rotation

Lors d’une rotation de l’écran, Android supprimera et recréera toutes les activités en cours d’exécution ou en pause.
Ce comportement est celui par défaut, vous pouvez adapter la réponse de vos activités aux changements d’orientation.
Finalement c’est aux développeurs de vérifier et corriger l’affichage de votre application dans le mode portrait et landscape.

Création des nouvelles vues

Pour créer vos nouvelles vues qui seront affichées en monde landscape, il suffit de créer un nouveau dossier dans le dossier res. Ce dossier se nommera layout-land.
Vous devez donc repenser votre interface pour que la vue en mode landscape soit agréable à utiliser sans surcharger l’écran.

Tester sur l’émulateur

Pour simuler la rotation de l’écran sur l’émulateur, il faut utiliser le raccourci CTRL + F12.

Sauvegarde de l’état

Comme précisé plus haut, Android détruit votre vue en cas de changement d’orientation pour construire la nouvelle vue. Donc vous voulez peut être sauvegarder des données avant le changement d’orientation, par exemple si l’utilisateur a commencé à saisir du texte.
Pour résoudre ce problème, il suffit d’utiliser la méthode onSaveInstanceState().
Cette méthode est appelée à chaque fois que votre activité est détruite.
Grâce à cette méthode vous pouvez sauvegarder les données que vous souhaitez dans un Bundle afin de pouvoir récupérer l’état de votre activité.
Cette récupération est possible, car dans le onCreate, la méthode onRestoreInstanceState() est appelée afin de récupérer l’état de votre vue, donc dans cette méthode vous pouvez utiliser toutes les valeurs que vous avez stocké dans la méthode précédente.

Limitation

La méthode onSaveInstanceState, possède ses limites car on peut stocker peu d’information dans un Bundle et dans certains cas on aurait besoin de stocker beaucoup plus.
On peut contourner ce problème en utilisant la méthode onRetainNonConfigurationInstance() qui vous permet de renvoyer un objet que vous pouvez récupérer grâce à la méthode getLastNonConfigurationInstance().

Surcharger la rotation

Dans certains cas, il est indispensable de surcharger le comportement par défaut de la rotation sur votre application.
Pour cela il suffit simplement de :
  • Utiliser l’attribut android:configChanges de l’élément activity dans le fichier AndroidManifest.xml pour citer les modifications de configuration que vous voulez gérer. Il peut prendre les valeurs suivantes : 

  • Puis dans votre activité, il vous faut implémenter la méthode onConfigurationChanged() pour gérer les configurations que vous avez cité dans votre manifest.

Bloquer la vue

Pour finir vous pouvez bloquer votre vue dans un mode ou un autre. Cette méthode est déconseillée par Google, car bloquer une vue en portrait réduit significativement l’expérience utilisateur et encore plus pour les tablettes, car pour les tablettes la vue par défaut est landscape et non portrait.
Pour utiliser cette manipulation, il suffit d’ajouter android:screenOrientation=”portrait ou landscape”. Cela permet de verrouiller votre activité dans le sens souhaité.

Best Practice – Gérer les tablettes

Si vous souhaitez gérer la rotation dans tous les cas, pour que votre application s’affiche naturellement pour les utilisateurs de tablette et ceux de téléphone. Vous pouvez utiliser le code suivant :



int x = AXIS_X;
int y = AXIS_Y;
case(Display.getRotation())
    Surface.ROTATION_0: //Ici votre code
break;
    Surface.ROTATION_90: x=AXIS_Y; y = AXIS_MINUS_X;
 //Ici votre code
break;
    Surface.ROTATION_180: y=AXIS_MINUS_Y;
                //Ici votre code
break;
    Surface.ROTATION_270: x=AXIS_MINUS_Y; y = AXIS_X;
 //Ici votre code
break;
Conclusion

Ce tutoriel se fini ici, en espérant qu’il vous a aidé à mieux comprendre comment gérer la rotation dans vos applications.
Share:

jeudi 31 mai 2012

Faite parler votre Android


Dans ce Tuto je vais faire parler mon Android Phone avec une liste aléatoire de phrases et de mots grâce à la synthèse vocale.

Je crée mon fichier de ma fenêtre avec juste un bouton pour lancer mon action.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button android:id="@+id/again_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="false"
android:text="teste" />
</LinearLayout>
Dans ma classe j’implémente l’objet TextToSpeech, qui permet de lancer la synthèse vocale
public class CommandeVocal extends Activity implements TextToSpeech.OnInitListener {
private static final String TAG = "TextToSpeechDemo";
//creation de objet TextToSpeech
private TextToSpeech mTts;
private Button mAgainButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_xml);
//instanciation de l'objet  mTts
mTts = new TextToSpeech(this,this );
mAgainButton = (Button) findViewById(R.id.again_button);
mAgainButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
ParleandroidPhone ();
}
});
}
Je crée mon tableau  de phrases aléatoire.
private static final Random RANDOM = new Random();
private static final String[] HELLOS = {
"Bonjour",
"Comment tu vas",
"Bienveunue dans notre page truc et astuce informatique",
};
Une méthode importante dans notre classe c’est la méthode onInit qui permet de configurer la langue de notre synthèse vocale.
// Implements TextToSpeech.OnInitListener.
public void onInit(int status) {
// vérification de la disponibilité  de la synthèse vocale.
if (status == TextToSpeech.SUCCESS) {
//le choix de la langue ici français
int result = mTts.setLanguage(Locale.FRANCE);
// vérification ici si cette langue est supporté par le terminal et si elle existe
if (result == TextToSpeech.LANG_MISSING_DATA ||
result == TextToSpeech.LANG_NOT_SUPPORTED) {
//renvoi une erreur sur la console logcat.
Log.e(TAG, "Language is not available.");
} else {
mAgainButton.setEnabled(true);
ParleandroidPhone ();
}
} else {
// si la synthèse vocal n'est pas disponible
Log.e(TAG, "Could not initialize TextToSpeech.");
}
Puis ma Methode ParleandroidPhone qui lance aléatoirement une phrase
private void ParleandroidPhone () {
// choix aléatoire de la phrase.
int helloLength = HELLOS.length;
String hello = HELLOS[RANDOM.nextInt(helloLength)];
mTts.speak(hello, TextToSpeech.QUEUE_FLUSH,  null);
}


Share:

[Android] uploader une fichier sur un serveur web


  

package com.projet.UploadFile;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class UploadFile extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        HttpURLConnection connection = null;
        DataOutputStream outputStream = null;
        DataInputStream inputStream = null;
        String pathToOurFile = "/sdcard/nom_fichier";  
        String urlServer = "http://10.0.2.2:80/upload.php";
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary =  "******";
        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int maxBufferSize = 1*1024*1024;
        try
        {
        FileInputStream fileInputStream = new FileInputStream(new       File(pathToOurFile) );
        URL url = new URL(urlServer);
        connection = (HttpURLConnection) url.openConnection();
        // Allow Inputs & Outputs
        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setUseCaches(false);
        // Enable POST method
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Connection", "Keep-Alive");
        connection.setRequestProperty("Content-Type", "multipart/form-   data;boundary="+boundary);
        outputStream = new DataOutputStream( connection.getOutputStream() );
        outputStream.writeBytes(twoHyphens + boundary + lineEnd);
        outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + pathToOurFile +"\"" + lineEnd);
        outputStream.writeBytes(lineEnd);
        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        buffer = new byte[bufferSize];
        // Read file
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        while (bytesRead > 0)
        {
        outputStream.write(buffer, 0, bufferSize);
        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        }
        outputStream.writeBytes(lineEnd);
        outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
        // Responses from the server (code and message)
        int serverResponseCode = connection.getResponseCode();
       String serverResponseMessage = connection.getResponseMessage();
        fileInputStream.close(); 
        outputStream.flush();
        outputStream.close();
        }
        catch (Exception ex)
        {   
        //Exception handling
         Log.d("MainActivity", "Print " + ex.toString());
        }
    }
}  
Share:

mardi 29 mai 2012

[Android]Les services sous Android


Un service est une composante essentielle d’une application. Il est nécessaire lorsque votre application souhaite effectuer des opérations ou des calculs en dehors de l’interaction utilisateur. Donc comme vous l’aurez compris un servicene dispose pas d’interface graphique.
Rien de mieux qu’un exemple, votre lecteur de musique vous permet d’écouter la musique tout en surfant sur internet, lisant vos mails et cette fonctionnalité n’est possible qu’à l’aide des services.

Il existe deux types de services :
  • LocalService : Services qui s’exécutent dans le même processus que votre application.
  • RemoteService : Ils s’exécutent dans des processus indépendants de votre application.

Cycle de vie d’un service

Un service n’a pas de durée définie , il est là pour exécuter sa tâche et il fonctionnera tant que c’est nécessaire.
On va présenter les différentes méthodes qui correspondent au cycle de vie d’un service. Ces méthodes seront à surcharger quand vous créerez votre service :
  • OnCreate() : Cette méthode est appelée à la création du service et est en général utilisée pour initialiser ce qui sera nécessaire à votre service.
  • OnStart(Intent i) : Le service démarre. Valable uniquement pour les versions du SDK inférieur à 2.0.
  • OnStartCommand(Intent i, int flags, int startId) : Le service démarre. Valable uniquement pour les versions du SDK supérieur à 2.0.
  • OnDestroy() : Appelé à la fermeture du service.

Mon premier Service

Nous allons faire un exemple pour mieux comprendre, dans ce dernier nous allons créer unservice qui affichera un toast contenant les coordonnées du téléphone. Le toast s’affichera quand les coordonnées seront mises à jour.
Nous allons créer un projet qui s’appellera MonPremierService, avec la version 2.1 du SDK.
  • Nom de l’application : Mon Premier Service
  • Package : com.tuto.android
  • Activité : HomeActivity
Dans notre classe HomeActivity, nous allons juste créer un bouton qui lancera le servicequand on cliquera dessus :
Dans le fichier main.xml, on met le code suivant :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/btn1"
    android:id="@+id/serviceBtn"
    />
</LinearLayout>
et voici le code à mettre dans l’activité correspondante
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
package com.tuto.android;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class HomeActivity extends Activity {
 
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 
 Button serviceBtn = (Button) findViewById(R.id.serviceBtn);
 
 serviceBtn.setOnClickListener( new OnClickListener()
 {
 
 @Override
 public void onClick(View actuelView)
 {
 startService(new Intent(HomeActivity.this, MonPremierService.class));
 }
 });
 }
}
Passons à notre service, pour le créer il suffit d’implémenter une classe qui hérite de la classe Service. Voici notre exemple :
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
68
69
70
71
72
73
74
75
76
package com.tuto.android;
 
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.widget.Toast;
 
public class MonPremierService extends Service
{
 private LocationManager            locationMgr             = null;
 private LocationListener       onLocationChange    = new LocationListener()
 {
 @Override
 public void onStatusChanged(String provider, int status, Bundle extras)
 {
 }
 
 @Override
 public void onProviderEnabled(String provider)
 {
 }
 
 @Override
 public void onProviderDisabled(String provider)
 {
 }
 
 @Override
 public void onLocationChanged(Location location)
 {
 
 Double latitude = location.getLatitude();
 Double longitude = location.getLongitude();
 
 Toast.makeText(getBaseContext(),
 "Voici les coordonnées de votre téléphone : " + latitude + " " + longitude,
 Toast.LENGTH_LONG).show();
 }
 };
 
 @Override
 public IBinder onBind(Intent arg0)
 {
 return null;
 }
 
 @Override
 public void onCreate()
 {
 
 locationMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
 locationMgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10000,
 0, onLocationChange);
 locationMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 0,
 onLocationChange);
 super.onCreate();
 }
 
 @Override
 public int onStartCommand(Intent intent, int flags, int startId)
 {
 
 return super.onStartCommand(intent, flags, startId);
 }
 
 @Override
 public void onDestroy()
 {
 super.onDestroy();
 locationMgr.removeUpdates(onLocationChange);
 }
  • Dans le OnCreate, On s’abonne au changement de géolocalisation, et dans leOnDestroy on se désabonne.
  • On crée une instance de la classe LocationListener, pour récupérer les nouvelles coordonnées.
  • Dans la méthode OnLocationChanged, on affiche les coordonnées à l’aide d’un Toast.
  • La méthode onBind sert quand on veut faire communiquer le service avec un autreservice, ou avec une activité ..etc.
Pour finir il faut déclarer le service dans le fichier AndroidManifest.xml, dans la partie Application
1
<service android:name="com.tuto.android.MonPremierService"/>
sans oublier les permissions suivantes :
1
2
3
4
5
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
<uses-permission android:name="android.permission.LOCATION" />
Ce qui donnera
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="utf-8"?>
    package="com.tuto.android" android:versionCode="1" android:versionName="1.0">
 
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".HomeActivity" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
        <service android:name="com.tuto.android.MonPremierService"/>
    </application>
 
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_GPS" />
    <uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
    <uses-permission android:name="android.permission.LOCATION" />
 
</manifest>
sans oublier le fichier strings.xml
1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="btn1">Lancer le service de géolocalisation</string>
    <string name="app_name">Mon Premier Service</string>
</resources>
Donc pour tester il suffit de :
  • Lancer sur le projet.
  • Cliquer sur le bouton.
  • Mettre à jour les coordonnées de géolocalisation.
  • Un Toast devrait apparaitre avec les coordonnées de géolocalisation
Voilà ce que vous devez obtenir :
Sur l’image çi-dessous, on voit bien que le service est lancé (propriétés applications dans les paramètres du téléphones).

Conclusion

Voilà ce tutoriel se finit ici, en espérant qu’il vous a aidé à comprendre comment fonctionne les services sous android.
Share:

Contributeurs

Membres

free counters