Android envoient beaucoup de SMS
J'ai une application qui envoie beaucoup de SMS à un serveur central. Chaque utilisateur va probablement envoyer ~300 txts/jour. Les SMS sont utilisés en tant que couche réseau, parce que le SMS est presque partout et l'internet mobile n'est pas. L'app est conçu pour être utilisé dans beaucoup de 3ème pays du monde où l'internet mobile n'est pas omniprésent.
Quand j'ai frappé une limite de 100 messages, je reçois une invite pour chaque message envoyé. Indique à l'invite "Un grand nombre de messages de SMS sont envoyés". Ce n'est pas ok pour l'utilisateur d'avoir invité chaque temps de se demander si l'application peut envoyer un message texte. L'utilisateur ne veut pas se faire 30 jours consécutifs invites.
J'ai trouvé cette source android fichier avec google. Il pourrait être mis à jour, je ne peux pas dire. Il semble qu'il y est une limite de 100 messages sms chaque 3600000ms(1 jour) pour chaque application.
/** 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;
et
/**
* 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;
}
}
Est-ce même le vrai code android? On dirait qu'il est dans le package "com.android.interne.la téléphonie.gsm", je ne peux pas trouver ce paquet sur l'android site.
Comment puis-je désactiver/modifier cette limite? J'ai cherché sur google pour trouver des solutions, mais je n'ai rien trouvé.
J'ai donc été en regardant le lien que commonsware.com posté, et j'ai trouvé que la source avait réellement changé. Et donc je pourrais toujours avoir un coup.
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);
C'est arriver checkPeriod et maxCount à partir d'un tableau de paramètres. Mais je ne semblent pas avoir accès à la même table. Cette source doit être Android 1.1, qui est le même que j'utilise. Lorsque j'essaie d'importer android.fournisseur de.Les paramètres.Gservices, je reçois un message d'erreur indiquant que l'importation ne peut pas être résolu.
Ce qui se passe?
- Juste une remarque: 3600000ms n'est pas un jour, mais une heure: 3600000ms = 3600s = 60m = 1h
- Si vous pouvez envoyer 100/heure et vous avez besoin seulement 300/jour, pourquoi ne pas simplement de l'accélérateur de votre application, et de travailler sur votre compression à la place? Aussi, je suis curieux; exactement quelle partie du monde n'a pas internet mobile, mais les téléphones android et 300 SMS sont pratiques et abordables? SMS est assez cher dans la plupart des pays sans développé l'internet mobile. Le seul cas d'utilisation je pense c'est de l'argent-pas-objet les sociétés étrangères; mais sûrement satallite téléphones ont une meilleure couverture pour l'argent?
- J'ai un SMS bomber qui envoie 1 texte à chaque seconde, et pas de limite, donc il y a évidemment un moyen de contourner cela. Et @Colin, pas de sat téléphones ne sont pas à ce qu'ils sont faits pour être. Mon père travaille pour le Département. de la Sécurité intérieure, et ils en ont, et il dit que vous devez être debout, parfaitement immobile pour les faire fonctionner. Pas même une brise légère peut être là, et surtout pas dans un bâtiment. Ceux que l'armée utilise sont plus comme les appareils sans fil qui sont tous reliés à un grand plat ou une station de base quelque part à proximité.
- vous avez un SMS bomber sur Android sans dispositif d'ancrage? Si oui, svp laissez-moi savoir plus.
- C'était l'une des premières choses que j'ai téléchargé quand j'ai eu mon MotoDroid, de sorte que c'était plus d'un an. Il a par la suite été retiré du marché. Il a été appelé JDS SMS Bomber. Le développeur a un site où vous pouvez le télécharger, mais a une limite maintenant pour une raison quelconque. Je suppose que je pourrais déchirer l'APK de mon téléphone et de le rendre disponible (puisque c'est gratuit de toute façon).
- Aucune solution trouvée ?
- Aussi Mohit, je suis curieux de ce projet sur lequel vous travaillez? Je suis en train de faire quelque chose pour des projets de recherche Universitaire et serait intéressé à discuter. Merci! Vous pouvez m'écrire à [salut @ jonl . org] sans les espaces bien sûr.
- Quelqu'un a un solution? Mon application est une application de confiance, non pas dans le Play Store pour son propre usage, cette restriction est incorrect.
- Essayez cette blog.drhack.net/gosms-android-sms-security-feature. Pas de travail. Essayé une autre forum.xda-developers.com/showthread.php?t=1835056, mais toujours popping out.
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayez d'utiliser "import android.fournisseur de.Les paramètres;" au lieu de "import android.fournisseur de.Les paramètres.GServices"? (voir la ligne 36 de SMSDispatcher.java)
Aussi, pas sûr de savoir comment beaucoup de différence que ça fait, mais 3600000 ms est un heure pas un jour.
Malheureusement, je pense que vous n'avez que quelques options
1) Obtenir l'accès root et de modifier les paramètres de table directement en faisant:
2) l'Utilisation de plusieurs applications, puisque c'est par application de la limite
3) peut-être enlever la batterie une fois que vous atteignez la limite? Il ressemble à la limite est stockée dans la mémoire. Je n'ai pas essayé encore mais.
Cela semble être construit dans la source Android arbre, de sorte que le seul moyen de repousser les limites de ce changement vers le bas pour les utilisateurs serait de construire votre propre ROM et de les avoir à l'installer.
Que pour des idées sur l'obtention autour d'elle, pourquoi ne pas vérifier la connectivité réseau en premier plutôt que de simplement supposer qu'elle n'existe pas. Même si elle n'est pas présente sur une grande majorité des appareils d'aujourd'hui, qui ne sera certainement pas toujours être le cas. Laissez-SMS-être le mécanisme. Si c'est le mécanisme, vous pouvez alors demander à l'utilisateur de leur laisser savoir qu'ils seront invité à confirmer le niveau de l'activité SMS tous les 100 messages ou plus. Qui sait, ils peuvent se déplacer dans un point d'accès Wifi et disposent d'une connectivité partie de la journée aussi.
Sinon, vous obtiendrez en un jeu de l'installation d'un tas d'autres Activités+Intentions qui peuvent agir comme des SMS silencieux proxys pour contourner la limite. Bien sûr, cela a son propre ensemble de qualités indésirables ainsi et je peux à peine croire que j'ai tapé juste/a suggéré quelque chose que le mal.