2012-01-25 27 views
14

Nella mia applicazione I non utilizzare per utilizzare il mittente del messaggio predefinito. Per farlo ho seguito il seguente link In Android is it possible to send sms message to more than one recipient in code?Impossibile inviare SMS tramite SMSManager in Android

  • E anche quel codice ha funzionato. Ma i messaggi che sto inviando da questo codice non vengono salvati nella cartella Posta in uscita e Posta in arrivo.
  • sto usando SMS Manager come questo nel mio codice

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

Ma non sta inviando sms.please aiutarmi con Come posso inviare sms in Android - ho provato a seguito troppo PendingIntent sentPI = PendingIntent.getBroadcast (questo, 0, nuovo Intent ( INVIATO) , 0);

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

Non funziona anche.
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(); 
       } 
} 
     }); 

prega di consultare la modifica e dimmi che cosa ho fatto wrong.tost sta rivelando ma SMS non è ricevuto su un altro telefono utilizzando questo codice

+0

cosa vuoi dire "mittente del messaggio di default"? Si prega di chiarire – JoxTraex

+0

@JoxTraex: per impostazione predefinita del mittente del messaggio voglio dire che non voglio aprire l'app di messaggistica del sistema per inviare il messaggio che voglio inviare il messaggio dalla mia applicazione solo ... – Shruti

+0

Sto facendo qualcosa di simile QUI !!! http://stackoverflow.com/questions/14452808/sending-and-receiving-sms-mms-in-android – toobsco42

risposta

20

ho usato seguente codice per inviare SMS a più numeri e inviato sms viene salvato nei messaggi

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); 
    } 

per inviare il messaggio a più numeri che ho usato sopra funzione di:

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

In questo codice, ogni volta che si chiama questa funzione 2 * NEW * BroadcastReceiver viene registrato. Questo diventerà un po 'folle quando inizi a chiamare questa funzione più volte. – Billy

+0

è possibile chiamare all'interno del ricevitore unregisterReceiver (questo); per evitarlo –

+0

Sei un risparmiatore di vita ... ma quando inviamo messaggi su più numeri memorizza solo il primo numero della lista negli articoli inviati non tutti i numeri? –

3

1) aggiungere messaggi in Posta inviata anziché in Posta in uscita, poiché Posta in uscita contiene messaggi che devono essere inviati o inviati nello stato di invio.

2) quando si invia un messaggio aggiungerli al tempo stesso in "contenuti: // sms/inviato uri

ciò che si ferma u per memorizzarli nel database e che cosa ancora provato

...

utilizzo qui di seguito il codice per SendSMS

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

e utilizzando contenuto: // sms/inviato URI, è possibile inserire lo stesso messaggio di testo in messaggio dat abase

+0

: grazie per la risposta .. vedere la mia modifica ho aggiunto il codice troppo mostra toast per sms inviato – Shruti

+0

ho modificato il risposta, per favore, passaci una volta. la riga precedente "content: // sms/sent" è un contenuto uri, che punta alla tabella del database dei messaggi inviati, inserisci il tuo messaggio in questo URI, quindi il messaggio verrà inviato e inserito nel messaggio db che si riflette anche nell'app del messaggio ... – AAnkit

+0

ma devo inviare un messaggio a più numeri – Shruti

1

basta inviarlo direttamente ... utilizzando il SmsManager. L'unico problema è che l'utente non lo saprà.

2

Spero che questo può Aiutarti.

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; 
    } 

} 

aggiungere questa linea in AndroidManifest.xml

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

enter image description here

0

Nel mio caso, è stato il fatto che il corpo del messaggio supera i 160 caratteri e ho dovuto usare sendMultipartTextMessage in sostituzione di sendTextMessage.

2

Se si utilizza il dispositivo dual sim, è necessario menzionare il numero del mittente. Non è possibile passare null in quel momento. In caso contrario, SmsManager genererà un errore chiamato SmsManager.RESULT_ERROR_GENERIC_FAILURE.

codice per controllare i numeri di Sim attive:

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; 
     }