Tecnologia do Blogger.
RSS

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

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.

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

0 comentários:

Postar um comentário