2009-11-18 6 views
7

Je sais que le fournisseur de contenu SMS ne fait pas partie de l'API publique (du moins pas documenté), mais si je comprends bien, il est toujours possible d'utiliser plusieurs fonctionnalités SMS tant que vous savez comment utiliser l'API (?).Android SMS API

il est assez par exemple simple d'insérer un SMS dans votre boîte de réception:

ContentValues values = new ContentValues(); 
values.put("address", "+457014921911"); 
contentResolver.insert(Uri.parse("content://sms"), values); 

Malheureusement, cela ne déclenche pas la norme notification "nouvelle-SMS-in-your-boîte de réception". Est-il possible de déclencher cela manuellement?

Modifier: AFAIK la "application de messagerie standard (Messaging)" dans Android écoute les SMS entrants en utilisant l'autorisation android.permission.RECEIVE_SMS. Et puis, lorsqu'un nouveau SMS est arrivé, une notification de barre d'état est insérée avec un identifiant de notification "spécial". Donc une solution à mon problème (indiqué ci-dessus) pourrait être de trouver et d'envoyer l'intention de diffusion correcte; quelque chose comme "NOUVEAUX SMS A ARRIVÉ" -intent.

Modifier: Téléchargement d'une application de messagerie tierce (chompsms) à partir du marché Android. Cette application répond mieux à mes besoins. Quand j'exécute le code ci-dessus les chompsms notent le nouveau sms et montre la "notification standard de barre d'état". Donc, je dirais que l'application Android Messaging standard ne détecte pas les sms correctement? Ou ai-je tort?

Répondre

6

Malheureusement le code responsable de ces notifications est caché dans le messaging application. La classe MessagingNotification a une méthode staticupdateAllNotifications que vous pouvez appeler à l'aide d'un PathClassLoader et de réflexion:

PathClassLoader c = new PathClassLoader("/system/app/Mms.apk", getClassLoader()); 
Class.forName("com.android.mms.util.ContactInfoCache", true, c) 
    .getMethod("init", Context.class).invoke(null, context); 
Class.forName("com.android.mms.transaction.MessagingNotification", true, c) 
    .getMethod("updateAllNotifications", Context.class).invoke(null, context); 

This est évidemment un very bad idea pour plusieurs raisons, mais je ne peux pas penser à une autre façon de faire ce que vous avez décrit.

0

Peut-être que vous devriez remplacer

content://sms 

avec

content://sms/inbox 
+2

Aucune différence; SMS apparaît dans la boîte de réception. Mais toujours pas de belle notification sms :) - – Schildmeijer