В Android можно отправить смс-сообщение более чем одному получателю в коде?

Могу ли я с помощью класса smsManager отправить одно и то же SMS на несколько номеров одновременно? Или мне нужно сделать какой-то цикл?

Я хочу отправить смс из своего приложения, а не через программу обмена сообщениями.


person mbwasi    schedule 30.08.2010    source источник
comment
Вы пробовали отправлять числа через запятую?   -  person Macarse    schedule 30.08.2010
comment
Я попробовал на эмуляторе, и он не работает, только отправляет на первый номер, дайте мне попробовать на устройстве и посмотреть.   -  person mbwasi    schedule 30.08.2010
comment
Итак, разделение не работает.   -  person mbwasi    schedule 03.09.2010
comment
Можно ли отправить несколько сообщений одному пользователю [вопрос ниже может отправить несколько сообщений одному пользователю, но проблема в том, что сообщение, отправленное на 121, содержит полное входящее смс, поскольку его тело не является выбранным телом смс. Если возможно, может кто-нибудь сказать мне проблема][1] [1]: stackoverflow.com/questions/21498002/   -  person user3257190    schedule 01.02.2014


Ответы (1)


Здесь я прикрепляю исходный код того, что я сделал для отправки сообщения программно.

СМС:

public class SMS extends Activity {

 Button btnSendSMS;
 EditText txtPhoneNo;
 EditText txtMessage;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    btnSendSMS = (Button) findViewById(R.id.btnSendSMS);
    txtPhoneNo = (EditText) findViewById(R.id.txtPhoneNo);
    txtMessage = (EditText) findViewById(R.id.txtMessage);

    btnSendSMS.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View v) 
        {                
            String message = txtMessage.getText().toString();
            String phoneNo = txtPhoneNo.getText().toString();

            StringTokenizer st=new StringTokenizer(phoneNo,",");
            while (st.hasMoreElements())
            {
                String tempMobileNumber = (String)st.nextElement();
                if(tempMobileNumber.length()>0 && message.trim().length()>0) {
                    sendSMS(tempMobileNumber, message);
                }
                else {
                    Toast.makeText(getBaseContext(), 
                            "Please enter both phone number and message.", 
                            Toast.LENGTH_SHORT).show();
                }
            }

//                if (phoneNo.length()>0 && message.length()>0)                
//                    sendSMS(phoneNo, message);                
//                else
//                    Toast.makeText(getBaseContext(), 
//                        "Please enter both phone number and message.", 
//                        Toast.LENGTH_SHORT).show();
        }
    });  

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

}

Получатель SMS:

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

и необходимо установить разрешение в манифесте на READ_SMS,RECIEVE_SMS. Вот как вы можете отправить сообщение одному пользователю.

Вот как вы можете отправить сообщение нескольким пользователям. .......................................... Предположим, вам нужно отправить сообщение на несколько пользователей u могут написать число, разделенное запятой, например. 5558,5554.

Вот как вы можете разделить два числа, разделенные запятой, используя класс токенизатора String, используемый в приведенном выше коде.

Вы можете применить эту логику, когда вы вызываете функцию SendSms и каждый раз передаете соответствующий номер телефона

У меня это прекрасно работает... можешь попробовать... Это ответ на твой вопрос?

Спасибо,

Ракеш

person Rakesh Gondaliya    schedule 31.08.2010
comment
привет, Роман, я сделал приложение, позволяющее отправлять сообщения на несколько эмуляторов ... вы можете попробовать ... это будет работать, и напишите числа, разделенные запятой, например. 5556,5558.... - person Rakesh Gondaliya; 01.09.2010
comment
привет, Роман, ты доволен ответом, который я разместил, может ли он работать для тебя, это твой принятый ответ, или тебе нужна дополнительная помощь, я буду рад помочь .. Спасибо. Ракеш - person Rakesh Gondaliya; 04.09.2010
comment
Привет, Ракеш, спасибо за приведенный выше код. При отправке смс на несколько номеров с использованием этого кода мы можем получить код результата для каждого номера. Но для какого номера я получаю код результата, я не могу его уловить. Например, я отправляю смс на 1 10 цифр номер и другой 7-значный номер. я получаю 2 кода результата: один результат и другой общий отказ. для какого числа я получаю результат, а для какого числа я получаю общий отказ, который я не могу получить. - person Sando; 18.08.2011
comment
@RakeshGondaliya: этот ваш код работает и для меня, но сообщения, отправляемые с использованием этого кода, не сохраняются в папке «Исходящие» телефона. Пожалуйста, скажите мне, как я могу сохранять сообщения в папке «Входящие» и «Исходящие» по умолчанию ?? - person Shruti; 24.01.2012
comment
в моем случае он не приходит в доставленный широковещательный приемник, пожалуйста, помогите мне - person varun bhardwaj; 08.05.2012