use*_*284 33 sms android android-activity
我对Android很新.我试图从Android应用程序发送短信.使用SMS Intent时,SMS窗口打开,用户需要批准SMS并发送.
有没有办法在没有用户确认的情况下自动发送短信?
谢谢,Lior
Sun*_*nny 39
您可以使用此方法发送短信.如果sms大于160个字符,则使用sendMultipartTextMessage.
private void sendSms(String phonenumber,String message, boolean isBinary)
{
SmsManager manager = SmsManager.getDefault();
PendingIntent piSend = PendingIntent.getBroadcast(this, 0, new Intent(SMS_SENT), 0);
PendingIntent piDelivered = PendingIntent.getBroadcast(this, 0, new Intent(SMS_DELIVERED), 0);
if(isBinary)
{
byte[] data = new byte[message.length()];
for(int index=0; index<message.length() && index < MAX_SMS_MESSAGE_LENGTH; ++index)
{
data[index] = (byte)message.charAt(index);
}
manager.sendDataMessage(phonenumber, null, (short) SMS_PORT, data,piSend, piDelivered);
}
else
{
int length = message.length();
if(length > MAX_SMS_MESSAGE_LENGTH)
{
ArrayList<String> messagelist = manager.divideMessage(message);
manager.sendMultipartTextMessage(phonenumber, null, messagelist, null, null);
}
else
{
manager.sendTextMessage(phonenumber, null, message, piSend, piDelivered);
}
}
}
Run Code Online (Sandbox Code Playgroud)
piSend和piDelivered是Pending Intent当方法完成发送SMS时,它们可以触发广播
这是广播接收器的示例代码
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String message = null;
switch (getResultCode()) {
case Activity.RESULT_OK:
message = "Message sent!";
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
message = "Error. Message not sent.";
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
message = "Error: No service.";
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
message = "Error: Null PDU.";
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
message = "Error: Radio off.";
break;
}
AppMsg.makeText(SendMessagesWindow.this, message,
AppMsg.STYLE_CONFIRM).setLayoutGravity(Gravity.BOTTOM)
.show();
}
};
Run Code Online (Sandbox Code Playgroud)
并且您可以在活动中使用以下行注册它
registerReceiver(receiver, new IntentFilter(SMS_SENT)); // SMS_SENT is a constant
Run Code Online (Sandbox Code Playgroud)
另外不要忘记在onDestroy中取消注册广播
@Override
protected void onDestroy() {
unregisterReceiver(receiver);
super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)
fam*_*iro 18
如果您的应用程序在AndroidManifest.xml中具有以下权限
<uses-permission android:name="android.permission.SEND_SMS"/>
Run Code Online (Sandbox Code Playgroud)
您可以根据需要发送尽可能多的短信
SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage(...);
Run Code Online (Sandbox Code Playgroud)
这就是全部.
| 归档时间: |
|
| 查看次数: |
39822 次 |
| 最近记录: |