2012-01-25 12 views
14

En mi aplicación I no deseo querer usar el remitente de mensajes predeterminado. Para hacer eso seguí el siguiente enlace In Android is it possible to send sms message to more than one recipient in code?No se puede enviar SMS con SMSManager en Android

  • Y ese código funcionó también. Pero los mensajes que envío desde este código no se guardan en la bandeja de entrada ni en la bandeja de entrada de los teléfonos.
  • estoy usando gestor de SMS como esto en mi código

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

Pero no es el envío de sms.please ayudarme con cómo puedo enviar sms en Android - he intentado seguir muy de PendingIntent sentPI = PendingIntent.getBroadcast (esto, 0, nuevo Intención ( ENVIADO) , 0);

PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, 
new Intent(DELIVERED), 0); 
SmsManager sms = SmsManager.getDefault(); 
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI); 

Tampoco está funcionando.
SMSAPPActivity.java

EDIT:

btnSendSMS.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       String message = txtMessage.getText().toString(); 
       String[] PhnNoArray = new String[2]; 
       PhnNoArray[0] = "9999999999"; 
       PhnNoArray[1] = "8888888888"; 
       // StringTokenizer st = new StringTokenizer(phoneNo, ","); 
       smsManager = SmsManager.getDefault(); 
       for (int i = 0; i < PhnNoArray.length; i++) { 
        smsManager = SmsManager.getDefault(); 
         // this is the function that does all the magic 
//      sms.sendTextMessage(phoneNumber, null, msg, pi, null); 
        smsManager.sendTextMessage(PhnNoArray[i], null, message, null, 
          null); 
        Toast.makeText(getBaseContext(), "SMS sent : " + i, 
          Toast.LENGTH_SHORT).show(); 
       } 
} 
     }); 

Por favor, vea la edición y dime lo que he hecho wrong.tost está apareciendo pero sms no se recibe en el otro teléfono utilizando el código

+0

¿qué quiere decir "mensaje de remitente predeterminado"? Por favor, aclare – JoxTraex

+0

@JoxTraex: por defecto, el remitente del mensaje quiero decir que no quiero abrir la aplicación de mensajería del sistema para enviar el mensaje Quiero enviar el mensaje desde mi aplicación solamente ... – Shruti

+0

¡¡¡Estoy haciendo algo similar AQUÍ !!! http://stackoverflow.com/questions/14452808/sending-and-receiving-sms-mms-in-android – toobsco42

Respuesta

20

utilicé siguiente código para enviar SMS a varios números y enviado SMS se guarda en los mensajes

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: 
        ContentValues values = new ContentValues(); 
        for (int i = 0; i < MobNumber.size() - 1; i++) { 
         values.put("address", MobNumber.get(i).toString());// txtPhoneNo.getText().toString()); 
         values.put("body", MessageText.getText().toString()); 
        } 
        getContentResolver().insert(
          Uri.parse("content://sms/sent"), values); 
        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); 
    } 

para enviar el mensaje a varios números que utilicé anteriormente funcionan como:

if (MobNumber != null) { 

       for (int i = 0; i < MobNumber.size(); i++) { 
        String message = MessageText.getText().toString(); 
        String tempMobileNumber = MobNumber.get(i).toString(); 
        sendSMS(tempMobileNumber, message); 
       } 
+4

En este código, cada vez que llame a esta función 2 * NEW * BroadcastReceiver se registra. Eso se volverá un poco loco cuando comiences a llamar a esta función varias veces. – Billy

+0

puede llamar dentro del receptor unregisterReceiver (esto); para evitarlo –

+0

Eres un salvavidas ... pero cuando enviamos mensajes a múltiples números, ¿almacena solo el primer número de la lista en los artículos enviados, no todos los números? –

3

1) agregue mensajes en Enviado en lugar de en Bandeja de salida, ya que la Bandeja de salida contiene mensajes que se supone deben enviarse o enviarse.

2) cuando envía mensaje de añadirlos al mismo tiempo en "contenido: // SMS/uri envió

¿Qué impide u para almacenarlos en la base de datos y lo que aún trató

...

utilizar por debajo de código para sendSMS

smsManager.sendTextMessage(number, null,desc, null, null); 

y utilizando contenido: // SMS/envió URI, se puede insertar el mismo mensaje de texto a mensaje dat abase

+0

: gracias por responder .. ver mi edición he añadido código también muestra brindis por SMS enviado – Shruti

+0

edité el respuesta, por favor revisa una vez. la línea anterior "content: // sms/sent" es un contenido uri, que apunta a la tabla de la base de datos de mensajes enviados, inserte su mensaje en este URI, por lo que el mensaje se enviará e insertará en el mensaje db que se refleja en la aplicación de mensajes también ... – AAnkit

+0

pero tengo que enviar el mensaje a varios números – Shruti

1

simplemente envíelo directamente ... usando el SmsManager. El único problema es que el usuario no lo sabrá.

2

Esperamos que esto pueda ayudarte.

MainActivity.java

import android.os.Bundle; 
import android.app.Activity; 
import android.telephony.SmsManager; 
import android.view.Menu; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.*; 
import android.view.View.OnClickListener; 
import android.view.*; 


public class MainActivity extends Activity implements OnClickListener{ 


Button click; 
EditText txt; 
TextView txtvw; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

click = (Button)findViewById(R.id.button); 
txt = (EditText)findViewById(R.id.editText); 
txtvw = (TextView)findViewById(R.id.textView1); 

click.setOnClickListener(this); 
} 

@Override 
public void onClick(View v){ 


txt.setText(""); 
v = this.getCurrentFocus(); 

try{ 
    SmsManager sms = SmsManager.getDefault(); 
    sms.sendTextMessage("8017891398",null,"Sent from Android",null,null); 
} 
catch(Exception e){ 
    txtvw.setText("Message not sent!"); 
} 
if(v != null){ 
    InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(v.getWindowToken(),0); 
    } 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
// Inflate the menu; this adds items to the action bar if it is present. 
getMenuInflater().inflate(R.menu.main, menu); 
return true; 
    } 

} 

añadir esta línea en AndroidManifest.xml

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

enter image description here

0

En mi caso, fue el hecho de que el cuerpo del mensaje excede los 160 caracteres y tuve que usar sendMultipartTextMessage en lugar de sendTextMessage.

2

Si está utilizando un dispositivo dual sim, debe mencionar el número del remitente. No puede pasar nulo en ese momento. De lo contrario, SmsManager lanzará un error llamado SmsManager.RESULT_ERROR_GENERIC_FAILURE.

código para comprobar los números de Sims activos:

public static int getNumberOfActiveSim(Context context) { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { 
       SubscriptionManager subscriptionManager = SubscriptionManager.from(context); 
       List<SubscriptionInfo> subscriptionInfo = subscriptionManager.getActiveSubscriptionInfoList(); 
       return subscriptionInfo != null ? subscriptionInfo.size() : 0; 
      } 
      TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
      if(telephonyManager != null && telephonyManager.getSimState() == TelephonyManager.SIM_STATE_ABSENT){ 
       return 1; 
      } 
      return 0; 
     } 
Cuestiones relacionadas