Tengo una aplicación que envía muchos mensajes SMS a un servidor central. Cada usuario probablemente enviará ~ 300 txts/día. Los mensajes SMS se están utilizando como una capa de red, porque los SMS están en casi todas partes y la Internet móvil no. La aplicación está pensada para su uso en muchos países del tercer mundo donde Internet móvil no es omnipresente.Android enviando muchos mensajes SMS
Cuando llego a un límite de 100 mensajes, aparece un mensaje para cada mensaje enviado. El mensaje dice "Se está enviando una gran cantidad de mensajes SMS". Esto no está bien para que se le pregunte al usuario cada vez que pregunte si la aplicación puede enviar un mensaje de texto. El usuario no desea obtener 30 mensajes consecutivos.
Encontré este archivo fuente de Android con google. Podría estar desactualizado, no puedo decirlo. Parece que hay un límite de 100 mensajes de SMS cada 3600000ms (1 día) para cada aplicación.
/** Default checking period for SMS sent without uesr permit */
private static final int DEFAULT_SMS_CHECK_PERIOD = 3600000;
/** Default number of SMS sent in checking period without uesr permit */
private static final int DEFAULT_SMS_MAX_ALLOWED = 100;
y
/**
* Implement the per-application based SMS control, which only allows
* a limit on the number of SMS/MMS messages an app can send in checking
* period.
*/
private class SmsCounter {
private int mCheckPeriod;
private int mMaxAllowed;
private HashMap<String, ArrayList<Long>> mSmsStamp;
/**
* Create SmsCounter
* @param mMax is the number of SMS allowed without user permit
* @param mPeriod is the checking period
*/
SmsCounter(int mMax, int mPeriod) {
mMaxAllowed = mMax;
mCheckPeriod = mPeriod;
mSmsStamp = new HashMap<String, ArrayList<Long>>();
}
boolean check(String appName) {
if (!mSmsStamp.containsKey(appName)) {
mSmsStamp.put(appName, new ArrayList<Long>());
}
return isUnderLimit(mSmsStamp.get(appName));
}
private boolean isUnderLimit(ArrayList<Long> sent) {
Long ct = System.currentTimeMillis();
Log.d(TAG, "SMS send size=" + sent.size() + "time=" + ct);
while (sent.size() > 0 && (ct - sent.get(0)) > mCheckPeriod) {
sent.remove(0);
}
if (sent.size() < mMaxAllowed) {
sent.add(ct);
return true;
}
return false;
}
}
¿Es esto el código verdadero androide? Parece que está en el paquete "com.android.internal.telephony.gsm", no puedo encontrar este paquete en el sitio web de Android.
¿Cómo puedo desactivar/modificar este límite? He estado buscando soluciones en Google, pero no he encontrado nada.
Así que estaba mirando el enlace que publicó commonsware.com, y encontré que la fuente realmente había cambiado. Y entonces todavía podría tener una oportunidad.
int check_period = Settings.Gservices.getInt(mResolver,
Settings.Gservices.SMS_OUTGOING_CEHCK_INTERVAL_MS,
DEFAULT_SMS_CHECK_PERIOD);
int max_count = Settings.Gservices.getInt(mResolver,
Settings.Gservices.SMS_OUTGOING_CEHCK_MAX_COUNT,
DEFAULT_SMS_MAX_COUNT);
mCounter = new SmsCounter(max_count, check_period);
Esto está obteniendo checkPeriod y maxCount de una tabla de configuraciones. Pero parece que no tengo acceso a la misma mesa. Esa fuente debe ser Android 1.1, que es lo mismo que estoy usando. Cuando intento importar android.provider.Settings.Gservices, aparece un error que dice que la importación no se puede resolver.
¿Qué está pasando?
Solo una nota: 3600000ms no es un día, sino una hora: 3600000ms = 3600s = 60m = 1h –
Si puede enviar 100/hora y solo necesita 300/día, ¿por qué no simplemente acelera su aplicación, y trabaja en su compresión en su lugar? Además, tengo curiosidad; exactamente qué parte del mundo no tiene Internet móvil, pero los teléfonos android y 300 SMS son prácticos/asequibles? SMS es bastante caro en la mayoría de los países sin Internet móvil desarrollado. El único caso de uso en el que pienso es en las corporaciones extranjeras sin dinero; pero seguramente los teléfonos satallite tienen una mejor cobertura por el dinero? –
Tengo un atacante de SMS que envía 1 mensaje de texto por segundo y sin límite, por lo que obviamente hay una forma de evitarlo. Y @Colin, no los teléfonos satelitales no son para nada lo que están hechos para ser. Mi papá trabaja para el Departamento de Seguridad Nacional, y ellos lo tienen, y él dice que tienes que estar completamente quieto para que trabajen. Ni siquiera una brisa ligera puede estar allí, y especialmente no en un edificio. Los que los militares usan son más como teléfonos inalámbricos que están conectados a un gran plato o estación base en algún lugar cercano. – Brandon