gpt4 book ai didi

Android 发送大量短信

转载 作者:IT老高 更新时间:2023-10-28 23:15:09 24 4
gpt4 key购买 nike

我有一个应用程序,它向中央服务器发送大量 SMS 消息。每个用户可能每天发送约 300 个 txt。 SMS 消息被用作网络层,因为 SMS 几乎无处不在,而移动互联网却不是。该应用适用于移动互联网尚未普及的许多第三世界国家。

当我达到 100 条消息的限制时,我会收到每条发送消息的提示。提示说“正在发送大量短信”。每次都提示用户询问应用程序是否可以发送短信是不合适的。用户不希望获得 30 个连续提示。

我在 google 上找到了这个 android 源文件。它可能已经过时了,我不能说。每个应用程序每 3600000 毫秒(1 天)似乎有 100 条短信的限制。

http://www.netmite.com/android/mydroid/frameworks/base/telephony/java/com/android/internal/telephony/gsm/SMSDispatcher.java

/** 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。但我似乎无法访问同一张 table 。该来源应该是 Android 1.1,这与我正在使用的相同。当我尝试导入 android.provider.Settings.Gservices 时,我收到一条错误消息,提示无法解析导入。

发生了什么事?

最佳答案

您是否尝试过使用“import android.provider.Settings;”而不是“导入android.provider.Settings.GServices”? (见 SMSDispatcher.java 的第 36 行)

另外,不确定它有多大的不同,但 3600000 毫秒是一小时而不是一天。

关于Android 发送大量短信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1663514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com