【发布时间】:2012-01-24 14:35:22
【问题描述】:
好的。我正在通过我的应用程序发送短信。发送短信后,它会向服务器发送状态更新。这部分工作正常,但我遇到的问题是双重的。我不确定它们是否相关,但我认为它们是相关的。
我的应用能够向多个用户发送单个文本。这是代码示例...
if(phoneNumbers.length > 0 && message.getText().toString().equals("") == false)
{
for(int i=0;i<phoneNumbers.length;i++)
{
sms = SmsManager.getDefault();
try
{
sms.sendTextMessage(phoneNumbers[i], null, message.getText().toString(), null, null);
sentQuantity++;
}
catch(IllegalArgumentException e)
{
}
}
}
基本上,它只是遍历一组电话号码,并一次发送一个文本。这是我的部分问题所在。如果我选择 3 个或更多数字来发送文本,有时并非所有文本都实际发送。它发生得非常随机。
我认为这是因为发送每条消息之间存在延迟,但代码等待的时间不够长。我达到了这个假设,因为如果我使用 eclipse 进入程序并手动浏览应用程序,一切都会正常工作。
我的另一个问题是当我将短信状态更新发送到网络服务器时。
在发送短信后,该应用会立即连接到互联网,并通过 http 帖子告诉服务器发送的短信数量。这是我的网络代码sn-p...
for(int i = 0; i < postNames.length; i++)
{
nameValuePairs.add(new BasicNameValuePair(postNames[i], postValues[i]));
}
//http post
try{
HttpParams httpParameters = new BasicHttpParams();
int timeoutConnection = 10000;
HttpConnectionParams.setConnectionTimeout(httpParameters,timeoutConnection );
HttpClient httpclient = new DefaultHttpClient(httpParameters);
HttpPost httppost = new HttpPost(webAddress);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
此部分仅编译帖子的项目,连接到网页并发送帖子。这里的关键是 10 秒的连接超时。再一次,就像我之前说的,互联网连接在发送文本后立即发生。因此,如果我进入调试模式并手动逐步完成该过程,一切正常。但如果我只是在手机上运行该应用程序,我会收到连接超时错误。
现在,我希望如果我可以将短信数量减少到一个文本,而不管收件人的数量是多少,那就太棒了。我试过用逗号分隔电话号码,但没有奏效。我还尝试用分号分隔数字(就像 Microsoft Outlook 或 GMail 允许您将多个收件人添加到电子邮件中一样)。这些都不适合我。有没有人有什么建议?即使有完全不同的方法,也将不胜感激。哦,我不想使用 Google 消息传递意图来发送消息,我需要使用自己的应用程序。
【问题讨论】:
-
仅供参考,电话中的逗号是暂停,而不是分隔符。例如,如果您拨打一个号码并且在输入分机之前必须等待,您可以写
2135551212,,,,123这将呼叫该号码,等待 5 次暂停,然后再拨打 123。
标签: android sms android-intent