2010-11-23 1 views
7

comment puis-je enregistrer mon application de sorte que lorsque je reçois un SMS mon application apparaît dans la boîte de dialogue Action complète en utilisant. J'ai mis dans un code d'intentionandroid: enregistrer l'application pour recevoir des sms

<intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <action android:name="android.intent.action.SENDTO"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <category android:name="android.intent.category.BROWSABLE"/> 
      <data android:scheme="sms"/> 
</intent-filter> 

mais cela ne fonctionne pas ... dois-je utiliser le récepteur? Notez que l'activité dans laquelle j'ai inséré ce code n'est pas une activité principale. Merci

Répondre

8

Utilisez le code suivant.

<activity android:name=".SMSNewActivity" > 
      <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <data android:mimeType="vnd.android-dir/mms-sms" /> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 
       <action android:name="android.intent.action.SENDTO" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
       <data android:scheme="sms" /> 
       <data android:scheme="smsto" /> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="android.intent.action.SEND" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <data android:mimeType="text/plain" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".SMSMainListActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      <intent-filter> 
       <action android:name="android.intent.action.SEARCH" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
0

Vous aurez besoin

<uses-permission android:name="android.permission.RECEIVE_SMS" /> 

dans les AndroidManifest.xml

+0

J'ai autorisations –

+0

SEND_SMS, READ_SMS, WRITE_SMS, RECEIVE_SMS, BROADCAST_SMS –

3

Son pas bien documenté dans le document.

Vous pouvez trouver des informations sur AndDev

Voici quelques extraits:

  1. Vous devez utiliser la permission suivante, inclure dans votre AndroidManifest

<uses-permission android:name="android.permission.RECEIVE_SMS" />

2 Vous ne doit pas déclarer un filtre d'intention dans votre activité pour le même, mais le filtrer dans un récepteur, notamment après votre manifeste

<receiver android:name=".SMSReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>

3 Créer une classe qui étend android.content.IntentReceiver et remplacer la méthode onReceiveIntent de la classe aux aguets des android.provider.Telephony.SMS_RECEIVED ne fait pas partie du SDK

Heres certains plus extrait de code:

// @Override 
public void onReceiveIntent(Context context, Intent intent) { 
    if (intent.getAction().equals(ACTION)) { 
     // if(message starts with SMStretcher recognize BYTE) 
     StringBuilder sb = new StringBuilder(); 

     /* The SMS-Messages are 'hiding' within the extras of the Intent. */ 
     Bundle bundle = intent.getExtras(); 
     if (bundle != null) { 
      /* Get all messages contained in the Intent*/ 
      SmsMessage[] messages = 
       Telephony.Sms.Intents.getMessagesFromIntent(intent); 

      /* Feed the StringBuilder with all Messages found. */ 
      for (SmsMessage currentMessage : messages){ 
       sb.append("Received compressed SMSnFrom: "); 
       /* Sender-Number */ 
       sb.append(currentMessage.getDisplayOriginatingAddress()); 
       sb.append("n----Message----n"); 
       /* Actual Message-Content */ 
       sb.append(currentMessage.getDisplayMessageBody()); 
      } 
     } 
     /* Logger Debug-Output */ 
     Log.i(LOG_TAG, "[SMSApp] onReceiveIntent: " + sb); 

     /* Show the Notification containing the Message. */ 
     Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show(); 
+0

je ne peux utiliser android.content.IntentSender, android.content.IntentFilter et android.content.Intent ... –

+0

TestSMS public class étend BroadcastReceiver { private final Chaîne ACTION = "android.provider.Telephony.SMS_RECEIVED"; @Override public void OnReceive (contexte de contexte, l'intention Intent) {if ( intent.getAction() equals (ACTION).) { System.out.println ("je me suis un sms"); } } } mais cela ne fonctionne toujours pas. Je suis averti seulement quand je reçois un message, mais je veux que mon application soit dans la boîte de dialogue Action complète en utilisant ... –

+0

FYI, IntentReceiver a été retiré du SDK Android et a été remplacé par BroadcastReceiver. –

Questions connexes