Archives par mot-clé : Android

Google I/O 2015

The Verge a fait un excellent résumé en 10 min.

  • Android M est disponible en téléchargement «developer preview». Les principales nouveautés sont: les permissions sont demandées quand l’application en a besoin (et non plus à l’installation) et l’appareil se met en veille prolongée automatiquement (par exemple, s’il ne bouge pas) ce qui devrait fortement augmenter la durée de vie des appareils peu utilisés
  • brillo, un nouveau système d’exploitation pour les objets connectés
  • Google now peut maintenant fonctionner dans le contexte de l’application en cours d’usage
  • Google photos permet de partager des photos en dehors de Google+ et le stockage est illimité et gratuit. De plus, l’intelligence artificielle de Google classifie automatiquement les photos (l’application permet de trouver les photos «montagne» ou «nourriture»). Et l’interface de l’application a été améliorée.
  • Go Pro commercialisera un appareil permettant de prendre des photospheres et des vidéos à 360°
  • Inbox by Gmail est utilisable par tous (plus besoin d’invitation)

Jelly Beans: les applications payantes ne fonctionnent plus

Sur la version Android Jelly Beans 4.1.1, plusieurs composants sont perdus ou désactivés à chaque redémarrage du téléphone: il s’agit des ContentProviders, des widgets, des papiers-peints animés, des claviers alternatifs.

Cela ne concerne que les applications payantes, qui en raison d’une mesure de sécurité, sont installées sur une partition /mnt/asec qui n’est pas disponible que trop tard dans la phase de démarrage.

Ceci est très frustrant, et vient s’ajouter à ma liste de bugs.
Continuer la lecture de Jelly Beans: les applications payantes ne fonctionnent plus

Comment se faire rembourser une application Android

Si l’application a été achetée il y a moins de 15 min

C’est très simple

  1. Sur mobile, rendez-vous dans Google play store, puis « Mes applications ».
  2. Sélectionnez l’application que vous souhaitez retourner, et cliquez « désinstaller et rembourser »

Si l’application a été achetée avant

C’est plus compliqué, et le remboursement n’est pas garanti.

  1. Sur le web, rendez-vous dans « Mes commandes et paramètres« 
  2. Sur la ligne de l’application que vous souhaitez retourner, choisissez « Signaler un problème ». Sélectionnez « Je souhaite demander un remboursement ».
  3. Justifiez-vous. Envoyez le rapport.

Android SQLLiteOpenHelper n’aide pas vraiment

Arg! Je viens de découvrir avec horreur que SQLLiteOpenHelper n’était pas thread-safe.

Plus précisément, lorsque l’on fait un ContentProvider, on a envie d’écrire quelque chose comme:

  1. @Override
  2.     public Cursor query(Uri uri, String[] projection, String selection,
  3.             String[] selectionArgs, String sortOrder) {
  4.         SQLiteDatabase db = mDatabaseHelper.getReadableDatabase();
  5.         final String groupBy = null;
  6.         final String having = null;
  7.         switch (sUriMatcher.match(uri)) {
  8.         case URI_MATCH_1:
  9.             return db.query(TABLE1, projection,
  10.                     selection, selectionArgs, groupBy, having, sortOrder);
  11.         default:
  12.             throw new IllegalArgumentException("Unknown URI " + uri);
  13.         }
  14.     }
  15.     }

Hé bien, cela peut lever une exception

10-11 21:17:24.624: E/AndroidRuntime(29832): Caused by: java.lang.IllegalStateException: Cannot perform this operation because the connection pool has been closed.

En fait, la base qu’on manipule est fermée d’office lorsque

  • un autre thread appelle getWritableDatabase().
  • un autre thread appelle close() sur une autre instance de database, obtenue par un autre SQLLiteOpenHelper

Conclusion:

  • Réutiliser le même SQLLiteOpenHelper
  • N’utiliser que getWritableDatabase()

Plus de détails dans un article en anglais Database pitfalls.