[JAVA] Faire une capture d’écran d’une Android Activity et la partager

Une fonctionnalité intéressante à implémenter à votre application Android est d’ajouter un bouton de partage. Dans ce petit tutoriel je vais partager le code que j’ai implémenté et qui permet de faire une capture d’écran de l’activité courante et la partager vers les réseaux sociaux, par SMS, mail etc…

1. Manifest

La première étape de est de modifier le fichier Manifest (VOTREPROJET/AndroidManifest.xml). Ajoutez simplement la ligne suivante :

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Cette ligne permettra d’enregistrer la capture d’écran.

2. Le code Java

La capture d’écran est faite au format bitmap.

// Capture d'ecran
Bitmap bitmap;
View v1 = v.getRootView();
v1.setDrawingCacheEnabled(true);
bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);

La sauvegarde du fichier sur le téléphone (stockage externe) :

// Creation du dossier de destination
OutputStream output;
File filepath = Environment.getExternalStorageDirectory();
File dir = new File(filepath.getAbsolutePath() + "/Captures de mon Appli/");
dir.mkdirs(); 

// Creation du fichier
DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
Calendar cal = Calendar.getInstance();
File file = new File(dir, "capture" + dateFormat.format(cal.getTime()) + ".png");

Premièrement on ouvre l’Intent de partage qui regroupe les applications disponibles sur le téléphone de l’utilisateur, ensuite on convertit l’image au format .PNG et on la partage avec l’application (Hangouts, Twitter ou Facebook par exemple)


try {
// Intent de partage
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/jpeg");
output = new FileOutputStream(file);

// Convertion au format PNG
screenshot.compress(Bitmap.CompressFormat.PNG, 100, output);
output.flush();
output.close();

// Recuperation de l'image à partager
Uri uri = Uri.fromFile(file);
share.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(share, getResources().getString(R.string.share_tweet)));
} catch (Exception e) {
e.printStackTrace();
}

Voilà, recopiez tout ce code dans la classe Java de votre Activity, appliquez ces actions à un bouton et votre application est prête à partager des captures d’écran!

 

Gérer les rapports d’erreurs d’une application Android avec Acra

ACRA est une librairie pour les développeurs d’applications Android qui permet l’envoi automatique de rapports de crash lorsque l’application s’arrête brutalement ou ne fonctionnement pas correctement.

1. La philosophie de la libraire

Directement inspiré de ce que propose Alocaly (envoi de rapports d’erreurs par e-mail qui nécessite cependant une confirmation à chaque envoi), ACRA fait beaucoup plus fort. Là où certaines librairies impliquent d’avoir un serveur dédié sur lequel les rapports d’erreurs sont hébergés, ACRA intègre l’envoi/stockage des rapports directement sur une feuille d’un tableur de type Google Spreadsheets.

La librairie est Open Source, sous licence Apache. Elle peut donc être utilisée dans nimporte quelle application (payante ou gratuite).

2. Qui utilise ACRA ?

D’après AppBrain, la célèbre source d’informations sur les applications du Google Play Store, ACRA est utilisé dans 2,76% des applications disponibles sur la plateforme de Google (chiffres à Janvier 2015).

acra_install_google_play

 

Les applications qui implémentent le service proposé par ACRA n’appartiennent pas à une catégorie en particulier. On retrouve aussi bien des applications de productivité comme Adobe Reader que des jeux ou des launchers.

Le récapitulatif complet de l’utilisation de la librairie ACRA : http://goo.gl/w6vQ0K

3. Les avantages

Parmi les nombreux avantages de cette librairie :

  • Hébergement par Google (Google Docs Sheets)
  • Si la connexion internet n’est pas active au moment du crash, le rapport de bug est stocké en local et sera synchronisé ultérieurement
  • Ne nécessite pas la validation de l’envoi par l’utilisateur
  • Simplicité de mise en place

4. L’interaction avec l’utilisateur

Lors de l’arrêt brutal de votre application, vous avez 4 possibilités d’interagir avec l’utilisateur pour l’informer :

  • Silencieux : Les rapports d’erreurs sont envoyés en fond de tâche
  • Toast : Un message est affiché temporairement et les rapports d’erreurs sont envoyés simultanément
  • Notification : Une notification est ajoutée dans la “Status Bar” et le rapport sera envoyé seulement si l’utilisateur accepte l’envoi du rapport (avec un commentaire optionnel).
  • Boite de dialogue: une boite de dialogue contenant les informations du rapport d’erreur.

5. Mise en place

La simplicité de mise en place est un des principal avantage de ACRA. Ci-dessous, la procédure de mise en place de la librairie au sein d’un projet d’application Android (Eclipse) :

  • Télécharger la dernière version de la librairie ACRA : acra-X-X-X.jar (4.5.0 au 06/02/2015)
  • Placer la librairie dans un dossier “libs” à la racine de votre projet
  • Ajouter la librairie au “Build Path” de votre application :
  • Project> Properties > Java Build Path > Add JARs…
  • Création de la classe “MyApplication” qui hérite de android.app.Application.

acra_myapplication

  • Ajouter la classe “MyApplication” à l’élément <application> du fichier MANIFEST (/AndroidManifest.xml) et donner les droits d’accès à internet pour l’application.

acra_manifest_myapplication

  • Donner la permission à l’application de se connecter à Internet

acra_permissions_internet

C’est prêt! 

 

Générer une Android Key Hash de développement par le code

Pour intégrer l’API Facebook à votre application Android, une Android Key Hash de développement (ou de prod) est demandée.

Une solution consiste à télécharger et installer OpenSSL pour générer cette clé mais la solution que j’ai choisi moi, c’est de la générer par le code (en JAVA bien sur).

Voilà la solution :

public static String printKeyHash(Activity context) {
PackageInfo packageInfo;
String key = null;
try {

// Getting application package name, as defined in manifest
String packageName = context.getApplicationContext().getPackageName();

// Retriving Package info
packageInfo = context.getPackageManager().getPackageInfo(packageName,
PackageManager.GET_SIGNATURES);

Log.e("Package Name=", context.getApplicationContext().getPackageName());

for (Signature signature : packageInfo.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
key = new String(Base64.encode(md.digest(), 0));

// String key = new String(Base64.encodeBytes(md.digest()));
Log.e("Key Hash= ", key);

}
} catch (NameNotFoundException e1) {
Log.e("Name not found", e1.toString());
}

catch (NoSuchAlgorithmException e) {
Log.e("No such an algorithm", e.toString());
} catch (Exception e) {
Log.e("Exception", e.toString());
}

return key;
}

Pour toute autre recherche sur les fonctionnalités de l’API Facebook en elle-même, la document officielle est très bien faite.

 

X-Ray, visualiser l’architecture et les dépendances d’un projet sous Eclipse

Pour présenter ou tout simplement avoir une vue globale de l’architecture d’un projet, il existe un plugin Eclipse très pratique : X-Ray.

X-Ray c’est quoi ?

X-Ray est un plugin open-source destiné à Eclipse.

Il permet de visualiser :

  • la compléxité d’un projet
  • les dépendances entre les classes
  • les dépendances entre les packages

Etape 1 : Téléchargement

Deux archives sont à télécharger pour utiliser ce plugin.

La première est l’archive “GEF framework plug-in and metadata” utilisée pour générer les graphiques : Télécharger.
Prenez la dernière version disponible et télécharger l’archive “All-In One Update Site”.
xray_download_1

La seconde est l’archive “X-Ray plug-in” : Télécharger.
xray_download_2

Etape 2 : Installation

Pour l’installer, il suffit d’ajouter les différentes fichiers des deux archives téléchargées, aux sources de votre Eclipse.

Pour “GEF framework plug-in and metadata” :

x_ray_gef_content

  • Copiez-Collez les deux fichiers “artifacts.jar” et “content.jar” à la racine de votre eclipse (eclipse/)
  • Copiez-Collez tous les fichiers du dossier plugins dans le dossier plugins de votre eclipse (eclipse/plugins/)
  • Copiez-Collez tous les fichiers du dossier features dans le dossier features de votre eclipse (eclipse/features/)

Pour “X-Ray plug-in” :

xray_plugin_content

  • Copiez-Collez le fichier “org.malnatij.SVPlugin_X.X.jar” dans le dossier plugins de votre eclipse (eclipse/plugins/)

Voilà, le plugin est prêt pour l’utilisation.

Pensez à fermer et ré-ouvrir Eclipse pour voir les changements.

Etape 3 : Utilisation

Ce plugin dispose de quelques fonctionnalités intéressantes que vous découvrirez au fur et à mesure de son utilisation.

La première consiste à analyser l’état d’un projet (Clique droit sur le projet > Analyse with X-Ray)

On obtient une nouvelle vue “X-Ray” avec les infos globales du projet :

xray_recap_packages_classes_methods_lines

  • 3 packages
  • 9 classes
  • 58 méthodes
  • 1021 lignes

Accompagné d’un graphique bien sympa : La complexité du projet

xray_complexity_project

En cliquant sur le petit logo encadré en rouge, on peut modifier le type d’analyse et donc choisir d’analyser:

xray_analyse

  • Les dépendances entre les classes
  • Les dépendances entre les packages
  • La complexité du projet (actuel)

Autre graphique sympa : Les dépendances entre les classes

xray_class_dependency

Si vous avez d’autres plugins utiles, n’hésitez pas à les partager, merci!

Time to pack up : Application Android pour gérer le contenu de sa valise et préparer son voyage.

TimeToPackUp est une petite application Android que j’ai développé.

C’est une application qui vous permet de gérer efficacement le contenu de votre valise et préparer au mieux votre voyage.

Vous pourrez donc partir l’esprit tranquille en étant sûr de n’avoir rien oublié!

download_app_timetopackup

Elle est disponible au téléchargement (gratuit!) sur le Play Store à l’adresse suivante : TimeToPackUp

Le screen d’ouverture/accueil

htcone0

 

Les différentes catégories ajoutées par l’utilisateur :

htcone2

 

L’écran d’ajout d’une nouvelle catégorie (nom, logo et couleur) :

htcone_1

 

L’aide à l’utilisation :

htcone_3

 

Les sources sont également disponibles sur Github : ttps://github.com/joeybronner/TimeToPackUp

timetopackup_github_sources