2016-08-22 7 views
3

Ich sende 5 Nachrichten über Android SmsManager und müssen die Lieferfolge überprüfen. Sind die SMS, die in einer Bestellung gesendet werden, in der gleichen Reihenfolge oder nicht? Wenn nicht, was ist die Reihenfolge der Lieferung?Überprüfen Sie die SMS-Bestellung in Android

Ich denke, ich kann es durch BroadcastReceiver tun, um die Lieferung zu überprüfen, aber wie wäre es mit der Bestellung?

Dank

+0

„sind die SMS-Nachrichten, die in einer Reihenfolge, in der gleichen Reihenfolge oder nicht geliefert gesendet werden“ - ich würde nicht darauf zählen, wenn Sie senden die Sekunde, bevor Sie wissen, dass das erste empfangen worden ist ved. "Wenn nicht, was ist die Reihenfolge der Lieferung?" - Welche Reihenfolge auch immer der Mobilfunkanbieter wünscht. – CommonsWare

+0

@CommonsWare danke, ich möchte nur die Bestellung herausfinden. Ich möchte die Bestellung nicht kontrollieren. –

+0

Kann ich nicht so etwas wie eine ID an die SMS anhängen, damit ich sie überprüfen kann, "BroadcastReceiver" ausliefern? –

Antwort

-2

In der main.xml Datei im res/Layout-Ordner befindet, fügen Sie den folgenden Code, so dass der Benutzer eine Telefonnummer sowie eine Nachricht senden eingeben:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Enter the phone number of recipient" 
     />  
    <EditText 
     android:id="@+id/txtPhoneNo" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"   
     /> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"   
     android:text="Message" 
     />  
    <EditText 
     android:id="@+id/txtMessage" 
     android:layout_width="fill_parent" 
     android:layout_height="150px" 
     android:gravity="top"   
     />   
    <Button 
     android:id="@+id/btnSendSMS" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Send SMS" 
     />  
</LinearLayout> 

Als Nächstes verschicken wir in der SMS-Aktivität die Button-Ansicht, so dass wir, wenn der Benutzer darauf klickt, überprüfen, ob die Telefonnummer des Empfängers und die Nachricht eingegeben wurde, bevor wir die Nachricht mit sendSMS() senden. Funktion, die wir in Kürze definieren werden:

Die sendSMS() Funktion ist wie folgt definiert:

public class SMS extends Activity 
{ 
    //... 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     //... 
    } 

    //---sends an SMS message to another device--- 
    private void sendSMS(String phoneNumber, String message) 
    {   
     PendingIntent pi = PendingIntent.getActivity(this, 0, 
      new Intent(this, SMS.class), 0);     
     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNumber, null, message, pi, null);   
    }  
} 

eine SMS-Nachricht zu senden, können Sie die SmsManager Klasse. Im Gegensatz zu anderen Klassen instanziieren Sie diese Klasse nicht direkt. Stattdessen rufen Sie die statische Methode getDefault() auf, um ein SmsManager-Objekt zu erhalten. Die sendTextMessage() -Methode sendet die SMS-Nachricht mit einem PendingIntent. Das PendingIntent-Objekt wird verwendet, um ein Ziel zu identifizieren, das zu einem späteren Zeitpunkt aufgerufen werden soll. Zum Beispiel können Sie nach dem Senden der Nachricht ein PendingIntent-Objekt verwenden, um eine andere Aktivität anzuzeigen. In diesem Fall verweist das PendingIntent-Objekt (pi) einfach auf die gleiche Aktivität (SMS.java). Wenn die SMS gesendet wird, passiert also nichts.

Wenn Sie den Status der SMS-Nachricht zu überwachen, benötigen Prozess zu senden, können Sie tatsächlich zwei verwenden PendingIntent Objekte zusammen mit zwei BroadcastReceiver Objekte, wie diese

//---sends an SMS message to another device--- 
    private void sendSMS(String phoneNumber, String message) 
    {   
     String SENT = "SMS_SENT"; 
     String DELIVERED = "SMS_DELIVERED"; 

     PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, 
      new Intent(SENT), 0); 

     PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, 
      new Intent(DELIVERED), 0); 

     //---when the SMS has been sent--- 
     registerReceiver(new BroadcastReceiver(){ 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) 
       { 
        case Activity.RESULT_OK: 
         Toast.makeText(getBaseContext(), "SMS sent", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
         Toast.makeText(getBaseContext(), "Generic failure", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case SmsManager.RESULT_ERROR_NO_SERVICE: 
         Toast.makeText(getBaseContext(), "No service", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case SmsManager.RESULT_ERROR_NULL_PDU: 
         Toast.makeText(getBaseContext(), "Null PDU", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case SmsManager.RESULT_ERROR_RADIO_OFF: 
         Toast.makeText(getBaseContext(), "Radio off", 
           Toast.LENGTH_SHORT).show(); 
         break; 
       } 
      } 
     }, new IntentFilter(SENT)); 

     //---when the SMS has been delivered--- 
     registerReceiver(new BroadcastReceiver(){ 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) 
       { 
        case Activity.RESULT_OK: 
         Toast.makeText(getBaseContext(), "SMS delivered", 
           Toast.LENGTH_SHORT).show(); 
         break; 
        case Activity.RESULT_CANCELED: 
         Toast.makeText(getBaseContext(), "SMS not delivered", 
           Toast.LENGTH_SHORT).show(); 
         break;       
       } 
      } 
     }, new IntentFilter(DELIVERED));   

     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);   
    } 

Neben SMS-Nachrichten programmatisch zu senden, können Sie auch abfangen eingehende SMS mit einem BroadcastReceiver-Objekt.

zu sehen, wie SMS-Nachrichten aus Ihrer Android-Anwendung, in der AndroidManifest.xml Datei hinzufügen, um das Element zu erhalten, so dass eingehende SMS-Nachrichten durch die SmsReceiver Klasse abgefangen werden können:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="net.learn2develop.SMSMessaging" 
     android:versionCode="1" 
     android:versionName="1.0.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".SMS" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity>   

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

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

In der SmsReceiver Klasse , die BroadcastReceiver Klasse erweitern und die OnReceive() -Methode außer Kraft setzen:

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.gsm.SmsMessage; 
import android.widget.Toast; 

public class SmsReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     //---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(); 
     }       
    } 
} 
+0

Danke, aber ich kenne das Konzept des Sendens und Empfangens von SMS, ich brauche eine einzigartige Lösung. Bitte lies meine Frage erneut. –

+0

Ich gebe Broadcast-Empfänger zu überprüfen sms senden oder nicht –

+0

und Sie finden auch SMS-Bestellung dachte Rundfunkempfänger Bitte lesen Sie sorgfältig –

Verwandte Themen