2010-10-06 19 views
11

Android non sta attivando l'intenzione di consegna quando si invia un messaggio di testo. Sto testando questo su Android 2.2 su HTC EVO 4G.SMS Android Messaggio messaggio di consegna intento

Questo è il codice corrente. Sto vedendo "SMS inviati intenti ricevuti". nei registri, ma non "l'intento inviato via SMS ricevuto".

// Constants 
String SENT_ACTION = "SMS_SENT_ACTION"; 
String DELIVERED_ACTION = "SMS_DELIVERED_ACTION"; 
String CELL_NUMBER = "0000000000"; 
String MESSAGE = "Hello World!"; 

// SMS sent pending intent 
PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, 
     new Intent(SENT_ACTION), 0); 

// SMS delivered pending intent 
PendingIntent deliveredIntent = PendingIntent.getBroadcast(this, 0, 
     new Intent(DELIVERED_ACTION), 0); 

// SMS sent receiver 
registerReceiver(new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "SMS sent intent received."); 
    } 
}, new IntentFilter(SENT_ACTION)); 

// SMS delivered receiver 
registerReceiver(new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "SMS delivered intent received."); 
    } 
}, new IntentFilter(DELIVERED_ACTION)); 

// Send the SMS message 
SmsManager sms = SmsManager.getDefault(); 
sms.sendTextMessage(CELL_NUMBER, null, MESSAGE, sentIntent, deliveredIntent); 
+2

A partire dal sistema operativo attuale distribuito in Thunderbolt, HTC sovrascrive completamente tutti i risultati degli SMS inviati e inviati. Se il messaggio ha esito positivo, è possibile rispondere ai codici dei risultati, ma se il messaggio non riesce, HTC sostituisce automaticamente tutti i codici dei risultati, il codice non viene attivato e reinvia automaticamente il messaggio. Fondamentalmente se stai provando a codificare le notifiche inviate e ricevute per un'applicazione SMS, stai perdendo tempo con i dispositivi HTC! Proverò a inviare un'email a HTC e se ricevo una risposta, rimango scioccato. –

+0

Qualche risposta o nuova notizia? – cprcrack

+0

dai un'occhiata a questa discussione: http://code.google.com/p/android/issues/detail?id=2305 – mtekeli

risposta

6

chiamate questo metodo in cui si desidera inviare Sms

private String SimState = ""; 
private String address = ""; // Recipient Phone Number 
private String message = ""; // Message Body 

private void sendSms() { 
    if (isSimExists()) { 
     try { 
      String SENT = "SMS_SENT"; 

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

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

      SmsManager smsMgr = SmsManager.getDefault(); 
      smsMgr.sendTextMessage(address, null, message, sentPI, null); 
     } catch (Exception e) { 
      Toast.makeText(this, e.getMessage() + "!\n" + "Failed to send SMS", Toast.LENGTH_LONG).show(); 
      e.printStackTrace(); 
     } 
    } else { 
     Toast.makeText(this, SimState + " " + "Cannot send SMS", Toast.LENGTH_LONG).show(); 
    } 
} 


// For receiving sms 

class SMSReceiver extends BroadcastReceiver { 
    private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent != null && intent.getAction() != null && ACTION.compareToIgnoreCase(intent.getAction()) == 0) { 
      // Sms Received Your code here 
     } 
    } 
} 

Nota: È necessario specificare android.permission.SEND_SMS e android.permission.RECEIVE_SMS autorizzazioni in file manifesto e anche il ricevitore

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

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.tekeli.order" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="11" /> 
    <uses-permission android:name="android.permission.SEND_SMS" ></uses-permission> 
    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".ActivityOrderActivity" 
      android:label="@string/app_name"> 
      <intent-filter > 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".B" ></activity> 
     <activity android:name=".C"></activity> 
    </application> 

</manifest> 
+0

Che cos'è isSimExists()? , inserisci lo snippet di codice per il metodo isSimExists() anche –

+2

@kirtiavaiya Plz consulta http://androidsnippets.wordpress.com/2012/08/07/how-to-check-whether-sim-card-exists-or-not-in -android/for isSimExists method –

+0

Questa non è la domanda che stava chiedendo. Stava chiedendo del PendingIntent consegnato che non fornisci alla funzione sendTextMessage(). – ocross

Problemi correlati