2010-08-22 6 views
1

Je travaille sur une application simple pour le HTC EVO qui fait clignoter le voyant de notification alternatif lorsqu'un nouveau message texte est reçu. J'ai cette partie fonctionne très bien via un récepteur de diffusion, mais j'ai besoin d'un moyen d'éteindre la LED lorsque l'utilisateur a lu le message (s) en utilisant leur application SMS par défaut. Je ne suis pas sûr s'il est préférable de le faire dans le récepteur ou dans un service d'arrière-plan. J'ai trouvé this, qui pourrait être ce que je cherche, mais je n'ai aucune idée sur la façon de l'utiliser car je ne pouvais pas trouver des instructions ou des tutoriels.Vérifier si un nouveau SMS a été lu

Répondre

3

Très bien, j'ai élaboré le code suivant qui, je pense, répondra à mes besoins.

private int getUnreadSMSCount() 
{ 
    int count = 0; 
    Uri smsURI = Uri.parse("content://sms"); 
    ContentResolver contentResolver = this.getContentResolver(); 
    Cursor cursor = contentResolver.query(smsURI, null, "read=0", null, null); 
    if (cursor != null) 
    { 
     try 
     { 
      count = cursor.getCount(); 
     } 
     finally 
     { 
      cursor.close(); 
     } 
    } 

    return count; 

}

0

Malheureusement, je ne crois pas qu'il existe un moyen de le faire.

Lorsque votre BroadcastReceiver reçoit le Intent, il s'agit d'une copie de la Intent, même avec l'application SMS par défaut. Vous avez donc chacun des copies du message indépendantes l'une de l'autre.

Vous pouvez définir votre propre copie du message à lire, mais vous ne pourrez pas voir son statut dans l'application SMS par défaut. En outre, l'application par défaut n'envoie pas une diffusion que le message a été lu, toutes ces données sont conservées localement. La seule façon de mettre en œuvre ceci serait d'écrire un remplacement complet de l'application de messagerie.

Désolé, j'espère que cela aide, laissez-moi savoir si vous avez d'autres questions.

+0

Ceci est en fait possible, voir le code I récemment. –

Questions connexes