Luc*_*ley 41 sms android android-intent
好.我正在通过我的应用发送短信.发送文本消息后,它会向服务器发送状态更新.这部分工作正常,但我遇到的问题是双重的.我不确定它们是否相关,但我认为它们是相关的.
我的应用程序可以向多个用户发送单个文本.这是代码示例...
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)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,它只是循环遍历一组电话号码,并一次发送一个文本.这是我的问题的一部分.如果我选择3个或更多数字来发送文本,有时并不是所有文本都会被发送.它发生得非常随机.
我认为这是因为发送每条消息之间存在延迟,但代码不会等待足够长的时间.我达到了这个假设,因为如果我使用eclipse进入程序并手动浏览应用程序,一切都可以正常工作.
我的另一个问题是当我将文本消息状态更新发送到Web服务器时.
文本消息发送后,应用程序立即连接到互联网,并通过http发布服务器告知服务器发送的文本数量.这是我的互联网代码片段......
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();
Run Code Online (Sandbox Code Playgroud)
此部分仅编译帖子的项目,连接到网页,并发送帖子.这里的关键是10秒连接超时.再次,就像我之前说的那样,互联网连接在发送文本后立即发生.因此,如果我进入调试模式并手动完成整个过程,一切正常.但如果我只是在手机上运行应用程序,我将收到连接超时错误.
现在,我希望如果我可以将文本消息的数量减少到一个单独的文本,无论收件人的数量多少,那将是非常棒的.我试过用逗号分隔电话号码,但这不起作用.我还尝试用分号分隔数字(就像Microsoft Outlook或GMail允许您将多个收件人添加到电子邮件中一样).这些都不适合我.有没有人有什么建议?即使完全采用不同的方法,也会受到赞赏.哦,我不想使用Google Messaging意图发送消息,我需要使用自己的应用程序.
Yaq*_*mad 71
实际上你需要在发送上一个短信后发送下一个短信,为此你需要检查发送的短信的状态,请看本教程,它说:
如果需要监视SMS消息发送过程的状态,实际上可以将两个PendingIntent对象与两个BroadcastReceiver对象一起使用,如下所示:
//---sends an SMS message to another device---
private void sendSMS(String phoneNumber, String message)
{
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
new Intent(SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
new Intent(DELIVERED), 0);
//---when the SMS has been sent---
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode())
{
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS sent",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Toast.makeText(getBaseContext(), "Generic failure",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Toast.makeText(getBaseContext(), "No service",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Toast.makeText(getBaseContext(), "Null PDU",
Toast.LENGTH_SHORT).show();
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Toast.makeText(getBaseContext(), "Radio off",
Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(SENT));
//---when the SMS has been delivered---
registerReceiver(new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode())
{
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "SMS delivered",
Toast.LENGTH_SHORT).show();
break;
case Activity.RESULT_CANCELED:
Toast.makeText(getBaseContext(), "SMS not delivered",
Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(DELIVERED));
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
}
Run Code Online (Sandbox Code Playgroud)
Abh*_*ane 19
我想这就是你需要的.下面的代码片段用于输入长消息并将它们分成一部分,并将每个消息分别发送给给定的联系人或甚至是一组联系人
public void sendLongSMS() {
String phoneNumber = "0123456789";
String message = "Hello World! Now we are going to demonstrate " +
"how to send a message with more than 160 characters from your Android application.";
SmsManager smsManager = SmsManager.getDefault();
ArrayList<String> parts = smsManager.divideMessage(message);
smsManager.sendMultipartTextMessage(phoneNumber, null, parts, null, null);
}
Run Code Online (Sandbox Code Playgroud)