Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Re: [OT] Enviar SMS em massa

Duplicado!


Em 1 de junho de 2013 10:22, Renato Mateus <renatomateusx@gmail.com> escreveu:
Em quinta-feira, 27 de setembro de 2012 16h36min49s UTC-3, Evandro Choma  escreveu:
> Boa tarde amigos
>
> Estou precisando de uma APP gostaria de saber se alguem conhece alguma que exista.
> Preciso enviar SMS em massa, tenho uma lista de 15 mil números de telefones celulares e gostaria de enviar uma mensagem igual para todos, então precisaria de uma APP que populasse uma base via CSV ou TXT e depois eu escreveria a mensagem e pediria para enviar, o programa ficaria rodando de forma a enviar os SMS a todos os números cadastrados.
>
> Alguem conhece algo similar?
>
> Não precisa ser gratuito eu tenho uma plano de SMS no meu chip.
>
>
> Obrigado
> Evandro Choma

Pessoal, poderiam me ajudar? Estou com um problema semelhante, entretanto, preciso fazer isso para uma clientela FIXA da minha pizzaria. www.JardimDaPizza.com.br. O que ocorre é.

Através de um webservice, ele obterá uma lista de telefones a enviar, e irá processar. Isto tudo, está fazendo certo, preciso ter um retorno de delivery e resposta mesmo para cadastrar o cliente em eventos realizados pela pizzaria.

Mas, quando no emulador funciona perfeitamente, no celular. GALAXY NOTE 2 é derrubado, também testei no milestone da motorolla e derruba também. segue codigo:


/*Classe que efetua todo o processo, inclusive o webservice.*/

```
package com.example.multisend;

import java.util.ArrayList;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;

import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.telephony.TelephonyManager;
import android.telephony.SmsManager;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;

public class MultiSend extends Activity {
        ToggleButton btnIniciar;
        TextView txtStatus, txtContador;
        Thread t;
        private static final String SENT  = "SMS_SENT";
        private static final String DELIVERED = "SMS_DELIVERED";

        String URL = "http://10.0.2.2:65052/Operacional.asmx";

        String TEMP_URI = "MultiSend.info";

        String resultado = "";

        TelephonyManager tm;

        SmsManager sMessage;

        int _CONTADOR = 0;

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

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

        private void iniciarServico(){
                tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
                txtStatus = (TextView) findViewById(R.id.txtStatus);
                txtStatus.setTextColor(Color.RED);
                txtStatus.setText("Serviço parado.");

                txtContador = (TextView) findViewById(R.id.txtContador);
                txtContador.setTextColor(Color.DKGRAY);


                btnIniciar = (ToggleButton) findViewById(R.id.btnIniciaServico);

                btnIniciar.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                iniciar();

                        }
                });
        }
        private void iniciar(){
                if(btnIniciar.isChecked()){
                        txtStatus.setTextColor(Color.GREEN);
                        txtStatus.setText("Serviço iniciado.");
                        getOrdens();
                }
                else{
                        txtStatus.setTextColor(Color.RED);
                        txtStatus.setText("Serviço interrompido.");
                }

        }
        private void servicoWeb(SoapObject request, String nameSpce, String metodo, String url, String soapAction, String property){
                try{

                        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                        envelope.dotNet = true;
                        envelope.setOutputSoapObject(request);

                        HttpTransportSE transporte = new HttpTransportSE(url, 6000);
                        transporte.call(soapAction, envelope);
                        SoapObject result = (SoapObject) envelope.getResponse();
                        retornoWS(result);

                }
                catch(Exception ex){
                        txtStatus.setTextColor(Color.RED);
                        txtStatus.setText(ex.getMessage().toString());
                }

        }

        private void registraAparelho(){
                Toast.makeText(this, "Por favor aguarde, estou registrando o aparelho.", Toast.LENGTH_SHORT).show();

                String nameSpace = TEMP_URI;
                String metodo = "xml_registraAparelho";
                String soapAction = "MultiSend.info/xml_registraAparelho";
                String property = "Retorno_SMS";

                SoapObject request = new SoapObject(nameSpace, metodo);
                        request.addProperty("marca", "Avulso");
                        request.addProperty("marca", "Modelo Avulso");
                        request.addProperty("numero", tm.getLine1Number());
                        request.addProperty("imei", tm.getDeviceId());

                servicoWeb(request, nameSpace, metodo, URL, soapAction, property);

        }

        private void getOrdens(){
                Toast.makeText(this, "Por favor aguarde...", Toast.LENGTH_SHORT).show();
                String nameSpace = TEMP_URI;
                String metodo = "xml_getOrdensEnvio";
                String soapAction = "MultiSend.info/xml_getOrdensEnvio";
                String property = "Retorno_SMS";
                SoapObject request = new SoapObject(nameSpace, metodo);
                        request.addProperty("imei", tm.getDeviceId());

                servicoWeb(request, nameSpace, metodo, URL, soapAction, property);
        }
        private void retornoWS(SoapObject result){
                ArrayList<SMS> lista = new ArrayList<SMS>();
                int count = result.getPropertyCount();
                for (int i = 0; i< count; i++){
                        SoapObject soap = (SoapObject) result.getProperty(i);
                        if(soap.getProperty("Retorno_SMS").toString().equals("0031")){
                                reiniciaProcesso();
                        }
                        else if(soap.getProperty("Retorno_SMS").toString().equals("0034")){
                                registraAparelho();
                        }
                        else if(soap.getProperty("Retorno_SMS").toString().equals("0030")){
                                getOrdens();
                        }
                        else if(soap.getProperty("Retorno_SMS").toString().equals("0000")){
                                Toast.makeText(this, "Por favor aguarde, preparando envio.", Toast.LENGTH_SHORT).show();
                                int id = Integer.parseInt(soap.getProperty("ID_SMS").toString());
                                String texto = soap.getProperty("Texto_SMS").toString();
                                String numero = soap.getProperty("Numero_SMS").toString();
                                String data = soap.getProperty("DataHoraRequisicao_SMS").toString();
                                int id_parceiro = Integer.parseInt(soap.getProperty("ID_Parceiro").toString());
                                SMS sms = new SMS(id, texto, numero, data, id_parceiro, "");
                                lista.add(sms);
                                if(!lista.isEmpty()){
                                        iniciaProcessoEnvio(lista);
                                        lista.clear();
                                }
                        }
                        else if(soap.getProperty("Retorno_SMS").toString().equals("0001")){
                                Toast.makeText(this, "Sem ordens para enviar", Toast.LENGTH_SHORT).show();
                                reiniciaProcesso();
                        }
                        else{
                                txtStatus.setText(soap.getProperty("Retorno_SMS").toString());
                        }
                        /*Fim do Loop*/
                }
                /*Chama a função para dar início ao envio*/

        }
        private void iniciaProcessoEnvio(ArrayList<SMS> lista){
                Toast.makeText(this, "Enviando mensagem...", Toast.LENGTH_SHORT).show();
                int contador = lista.size();
                for (int i = 0; i<contador; i++){
                        enviaMensagem(lista.get(i).Numero_SMS, lista.get(i).Texto, lista.get(i).ID_SMS);
                }
        }
        private void enviaMensagem(String numero, String texto, int id){
                try{
                        PendingIntent sendPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT).putExtra("ID_SMS", id), 0);
                        PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED).putExtra("ID_SMS", id), 0);
                        registerReceiver(new BroadcastReceiver() {

                                @Override
                                public void onReceive(Context context, Intent intent) {
                                        switch(getResultCode()){
                                        case Activity.RESULT_OK:
                                                atualizaStatus("Mensagem Enviada", "envio", intent.getExtras().getInt("ID_SMS"));
                                                break;
                                        case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                                                atualizaStatus("Erro no envio da mensagem", "envio", intent.getExtras().getInt("ID_SMS"));
                                                break;
                                        case SmsManager.RESULT_ERROR_NO_SERVICE:
                                                atualizaStatus("Sem serviço", "envio", intent.getExtras().getInt("ID_SMS"));
                                                break;
                                        case SmsManager.RESULT_ERROR_NULL_PDU:
                                                atualizaStatus("Erro de PDU", "envio", intent.getExtras().getInt("ID_SMS"));
                                                break;
                                        }
                                        unregisterReceiver(this);
                                }

                        }, new IntentFilter(SENT));


                        registerReceiver(new BroadcastReceiver() {

                                @Override
                                public void onReceive(Context context, Intent intent) {
                                        switch(getResultCode()){
                                        case Activity.RESULT_OK:
                                                atualizaStatus("Mensagem entregue", "recebimento", intent.getExtras().getInt("ID_SMS"));
                                                break;
                                        case Activity.RESULT_CANCELED:
                                                atualizaStatus("Mensagem não entregue", "recebimento", intent.getExtras().getInt("ID_SMS"));
                                                break;
                                        }
                                        unregisterReceiver(this);
                                }
                        }, new IntentFilter(DELIVERED));
                        sMessage = SmsManager.getDefault();
                        sMessage.sendTextMessage(numero, null, texto, sendPI, deliveredPI);
                        _CONTADOR += 1;
                        txtContador.setText("Enviados até agora: "+String.valueOf(_CONTADOR));
                }
                catch(Exception ex){
                        txtStatus.setTextColor(Color.RED);
                        txtStatus.setText(ex.getMessage());
                }
        }

        private void atualizaStatus(String status, String tipo, int id){
                String metodo;
                if(tipo.equals("envio")){
                        metodo = "xml_atualizaStatusEnvio";
                }
                else{
                        metodo = "xml_atualizaStatusRecebimento";
                }

                String nameSpace = TEMP_URI;
                String soapAction = "MultiSend.info/"+metodo;
                String property = "Retorno_SMS";

                SoapObject request = new SoapObject(nameSpace, metodo);
                        request.addProperty("imei", tm.getDeviceId());
                        request.addProperty("status", status);
                        request.addProperty("id", id);

                servicoWeb(request, nameSpace, metodo, URL, soapAction, property);
                Toast.makeText(this, status, Toast.LENGTH_SHORT).show();
        }
        private void reiniciaProcesso(){
                try{
                  Handler r = new Handler();
                  r.postDelayed(new Runnable() {

                        @Override
                        public void run() {
                                getOrdens();
                        }
                }, 60 * 1000);

                }
                catch (Exception e) {

                }
        }


}

```
/*Agora a classe que registra quando o receptor respondeu o SMS*/

```
package com.example.multisend;

import java.util.ArrayList;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.telephony.SmsMessage;

import android.widget.Toast;

public class SMSReceiver extends BroadcastReceiver {

        String URL = "http://10.0.2.2:65052/Operacional.asmx";

        String TEMP_URI = "MultiSend.info";

        String resultado = "";


        @Override
        public void onReceive(Context context, Intent intent) {
                Bundle bundle = intent.getExtras();
                SmsMessage[] msg  = null;
                String str = "";
                String from = "";
                String texto = "";


                if(bundle != null){
                        Object[] pdus = (Object[]) bundle.get("pdus");
                        msg = new SmsMessage[pdus.length];

                        for(int i = 0; i<msg.length; i++){
                                msg[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                                from = msg[i].getOriginatingAddress();
                                texto = msg[i].getMessageBody();
                        }
                        atualizaRetornoSMS(from, texto);
                        Toast.makeText(context, "Retorno de: "+from, Toast.LENGTH_SHORT).show();

                }


        }

        private void atualizaRetornoSMS(String numero, String texto){

                String metodo = "xml_atualizaStatusRetornoSMS";

                String nameSpace = TEMP_URI;
                String soapAction = "MultiSend.info/"+metodo;
                String property = "Retorno_SMS";

                SoapObject request = new SoapObject(nameSpace, metodo);
                        request.addProperty("numero", numero);
                        request.addProperty("retorno", "SMS lido e respondido");
                        request.addProperty("texto", texto);

                servicoWeb(request, nameSpace, metodo, URL, soapAction, property);

        }

        private void servicoWeb(SoapObject request, String nameSpce, String metodo, String url, String soapAction, String property){
                try{

                        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                        envelope.dotNet = true;
                        envelope.setOutputSoapObject(request);

                        HttpTransportSE transporte = new HttpTransportSE(url, 6000);
                        transporte.call(soapAction, envelope);
                        SoapObject result = (SoapObject) envelope.getResponse();
                        //retornoWS(result);

                }
                catch(Exception ex){
                        new Exception(ex.getMessage());
                }

        }


}

```

Espero que alguém possa me ajudar. Não sei mais para onde ir aqui. Obriagdo a todos.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.





--
                                              - Marcelo Henrique -
  "Se não puder se destacar pelo talento, vença pelo esforço." (Dave Weinbaum)
              "Mate o pecado antes que ele o mate." ( Richard Baxter )

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário