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.
Lire la suite

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.

Is SharePoint as feature-poor as it used to be?

When I was working on SharePoint, I was shocked to see the gap between the rich marketing slides on one hand and the poor feature set on the other hand.

Apparently, this hasn’t changed, if I take a look at the number of blogs that promote Sharepoint but which are hosted on a better Web content management system (usually WordPress)

  • http://blogs.technet.com/b/tothesharepoint/ NOT hosted on SarePoint
  • The Sharepoint guy http://blogs.msdn.com/b/uksharepoint/ NOT hosted on Sharepoint
  • Mastykarz Sharepoint MVP, hosted on WordPress
  • http://www.sharepointblog.co.uk/ hosted on WordPress
  • http://sharepointdragons.com/ powered by WordPress
  • http://notes2sharepoint.org/ powered by wordpress

People: eat your own food! Why don’t you do some WordPress consulting instead?

Talaria est morte. Vive Lutece!

Après 18 mois d’existence et plus de 13 000 téléchargements, il est temps pour Talaria de faire face aux aléas des connexions réseau. Les déconnexions sont fréquentes sur mobile, et particulièrement dans le métro!

J’ai opté pour une réécriture complète, en me basant sur le mécanisme des « Comptes et Synchro ». Et je vous invite donc à installer Lutece.

Lire la suite

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:
[code]
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = mDatabaseHelper.getReadableDatabase();
final String groupBy = null;
final String having = null;
switch (sUriMatcher.match(uri)) {
case URI_MATCH_1:
return db.query(TABLE1, projection,
selection, selectionArgs, groupBy, having, sortOrder);
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
}
}
[/code]

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.