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.
[androidbrasil-dev] Re: [OT] Enviar SMS em massa
06:22 |
Assinar:
Postar comentários (Atom)
0 comentários:
Postar um comentário