在Android平台上发送短信,开发者可以使用SmsManager类来实现,这个类提供了一系列的API来处理短信的发送、接收以及管理,下面将详细介绍如何在Android应用中实现发送短信的功能。
准备工作
在开始之前,需要在AndroidManifest.xml文件中添加必要的权限:
<usespermission android:name="android.permission.SEND_SMS" />
此权限允许应用发送短信。
使用SmsManager发送短信
需要获取SmsManager的实例,然后利用其sendTextMessage方法发送短信。
获取SmsManager实例
SmsManager smsManager = SmsManager.getDefault();
发送短信
String phoneNumber = "1234567890"; // 目标电话号码String message = "Hello, this is a test message!"; // 短信内容// 拆分长短信(如果需要的话)List<String> parts = smsManager.pideMessage(message);// 发送多部分短信for (String part : parts) { smsManager.sendTextMessage(phoneNumber, null, part, PendingIntent.getBroadcast(context, 0, new Intent("SMS_SENT"), 0), null);}
监听短信发送结果
为了知道短信是否成功发送,可以注册一个广播接收器来监听短信发送结果。
创建广播接收器
public class SmsSendBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(context, "SMS sent", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(context, "Generic failure", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Toast.makeText(context, "No service", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NULL_PDU: Toast.makeText(context, "Null PDU", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_RADIO_OFF: Toast.makeText(context, "Radio off", Toast.LENGTH_SHORT).show(); break; } }}
注册广播接收器
IntentFilter filter = new IntentFilter("SMS_SENT");registerReceiver(new SmsSendBroadcastReceiver(), filter);
完整的代码示例
下面是一个完整的活动(Activity)示例,展示了如何发送短信并监听发送结果。
public class SendSmsActivity extends AppCompatActivity { private static final String TAG = "SendSmsActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_send_sms); Button sendButton = findViewById(R.id.send_button); sendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendSms(); } }); } private void sendSms() { String phoneNumber = "1234567890"; // 目标电话号码 String message = "Hello, this is a test message!"; // 短信内容 SmsManager smsManager = SmsManager.getDefault(); // 拆分长短信(如果需要的话) List<String> parts = smsManager.pideMessage(message); // 发送多部分短信 for (String part : parts) { smsManager.sendTextMessage(phoneNumber, null, part, PendingIntent.getBroadcast(this, 0, new Intent("SMS_SENT"), 0), null); } // 注册广播接收器来监听短信发送结果 IntentFilter filter = new IntentFilter("SMS_SENT"); registerReceiver(new SmsSendBroadcastReceiver(), filter); } public class SmsSendBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(context, "SMS sent", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(context, "Generic failure", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Toast.makeText(context, "No service", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NULL_PDU: Toast.makeText(context, "Null PDU", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_RADIO_OFF: Toast.makeText(context, "Radio off", Toast.LENGTH_SHORT).show(); break; } } }}
注意事项
确保在真实设备上测试短信发送功能,因为模拟器可能不支持这一功能。
考虑到用户隐私和费用,确保在应用中明确告知用户短信发送行为,并提供选项让用户同意或拒绝。
检查设备是否具有发送短信的能力,某些平板电脑可能不支持短信功能。
遵守相关的法律法规,不要滥用短信发送功能。
FAQs
Q1: 为什么无法在模拟器上发送短信?
A1: Android模拟器通常不支持发送实际的SMS消息,它主要用于开发和测试应用的行为,而不是执行实际的硬件操作,如发送短信,要测试短信发送功能,您需要在真实的Android设备上进行。
Q2: 如果用户没有给予SEND_SMS权限会怎么样?
A2: 如果应用尝试发送短信但未获得用户的SEND_SMS权限,将会抛出SecurityException异常,最好在尝试发送短信之前检查并请求必要的权限。
TAG:安卓手机短信发送