我有一个应用程序,它将大量的短信发送到中央服务器。每个用户可能会发送约300 txts/day。短信正被用作网络层,因为短信几乎无处不在,移动互联网不是。该应用程序旨在用于移动互联网并非普遍存在的许多第三世界国家。Android发送大量短信
当我打100条消息的限制,我得到对于每个发送的消息的提示。提示说“正在发送大量的SMS消息”。这对用户每次得到提示时询问应用程序是否可以发送短信都是不好的。用户不想获得30个连续的提示。
我发现谷歌Android的这个源文件。它可能已经过时了,我不知道。看起来每个应用程序每3600000ms(1天)有100个短消息的限制。
/** 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;
和
/**
* 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;
}
}
这是连真正的Android代码?它看起来像是在“com.android.internal.telephony.gsm”包中,我无法在android网站上找到这个包。
如何禁用/修改此限制?我一直在搜索解决方案,但我没有找到任何东西。
所以我在查看commonsware.com发布的链接,发现源已经发生了变化。所以我可能还会有一个镜头。
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);
这是从设置表获取checkPeriod和maxCount。但我似乎无法访问同一张表。该来源应该是Android 1.1,这与我正在使用的是相同的。当我尝试导入android.provider.Settings.Gservices时,出现一条错误提示导入无法解析。
这是怎么回事?
只需要注意:3600000ms不是一天,而是一个小时:3600000ms = 3600s = 60m = 1h – 2009-11-02 23:24:21
如果您可以每小时发送100个小时,而每天只需要300个小时,那么为什么不直接关闭应用程序,你的压缩呢?另外,我很好奇;究竟世界上哪个地方没有移动互联网,但android手机和300条短信是实用的还是实惠的?在没有开发移动互联网的大多数国家,短信的费用相当高我想到的唯一用例是无货币的外国公司;但肯定satallite手机有更好的覆盖面的钱? – 2010-09-06 11:21:07
我有一个短信轰炸机,每秒发送1个文本,没有限制,所以显然有一个解决方法。而@科林,没有任何电话根本就不是他们所做的。我的父亲为国土安全部工作,他们有他们,他说你必须完全静止站立才能让他们工作。即使微风也不能在那里,特别是不在建筑物内。军方使用的更像无线手机,它们都连接到附近某个大盘子或基站。 – Brandon 2011-01-17 21:47:59