2010-09-20 7 views
3

Je souhaite remplacer l'application de messagerie android par défaut. Si je reçois un sms ou un mms je veux l'envoyer par mail mais je ne veux pas de notification sur le téléphone. Donc, fondamentalement, je veux remplacer l'application de messagerie par défaut.Remplacer l'application de messagerie android par défaut

Comment puis-je faire de mon application celle par défaut qui reçoit le sms?


Merci beaucoup. C'est exactement ce dont j'ai besoin. Mais j'ai un autre problème. J'ai utilisé le récepteur pour obtenir le message ... mais je ne sais pas comment trouver le message dans le téléphone et le marquer comme lu.

public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    //---get the SMS message passed in--- 
    Bundle bundle = intent.getExtras();   
    SmsMessage[] msgs = null; 
    String str = "";    
    if (bundle != null) 
    { 
     //---retrieve the SMS message received--- 
     Object[] pdus = (Object[]) bundle.get("pdus"); 
     msgs = new SmsMessage[pdus.length];    
     for (int i=0; i<msgs.length; i++){ 
      msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);     
      str += "SMS from " + msgs[i].getOriginatingAddress();      
      str += " :"; 
      str += msgs[i].getMessageBody().toString(); 
      str += "\n";   
     } 
     //---display the new SMS message--- 
     Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 

     //---find and mark the messages as read--- 
     Uri uriSms = Uri.parse("content://sms/inbox/"); 
     try{ 
     Cursor c = context.getContentResolver().query(uriSms, null,null,null,null); 
      //---code to find the message by body and sender--- 
      ... 

    } 

Y a-t-il un moyen d'identifier le message comme un identifiant? Maintenant, je trouve le message comparant le nombre de bofy et d'expéditeur pour tous les messages dans la boîte de réception.

Merci, Radu

Répondre

8

Il n'y a pas dans la façon dont vous envisagez une "application par défaut". La façon dont les applications sont distribuées dans Android est via Intents. Une application utilisera un IntentFilter pour identifier qu'il peut gérer des types spécifiques de Intents. Ce que vous cherchez est un BroadcastReceiver qui peut gérer l'intention SMSReceived. Cela permettra à votre application d'être notifiée lorsqu'un SMS est reçu. Afin de masquer la notification, vous devrez marquer le SMS comme lu en utilisant le SMS ContentProvider. Cela effacera la notification hors du bac de notification. Il est impossible de masquer un message de l'application de messagerie par défaut sauf si vous supprimez le message du SMS ContentProvider. Découvrez this link pour savoir comment commencer avec BroadcastReceivers.

+0

Le lien n'est plus disponible ... –

+0

@MartinBories Merci pour le heads up! Je l'ai remplacé par celui qui fonctionne. –

0

Il existe un moyen de bloquer le message à destination de l'application de messagerie par défaut. Si vous définissez la priorité de votre BroadcastReceiver sur une valeur suffisamment élevée (nous en utilisons 100) et que nous appelons abortBroadcast pour bloquer l'intention d'être intercepté par les BroadcastReceivers de moindre priorité. Cela ne fonctionnera que si l'intention diffusée est commandée, ce qui est hors de notre contrôle. Mais il s'avère que la diffusion de SMS_SENT est commandée, et je soupçonne que la diffusion de MMS_SENT l'est également.

0

Si vous avez envoyé une priorité de votre BroadcastReceiver suffisamment élevée, votre application est la première à recevoir le message, AVANT le message est stocké dans la base de données. Je suppose que la solution serait de stocker le message dans la base de données vous-même et d'appeler le abortBroadcast();, mais je n'ai pas encore essayé moi-même.

Bonne chance!

Questions connexes