Android开发:详解短信发送及广播监听小程序

0 下载量 141 浏览量 更新于2024-09-01 收藏 119KB PDF 举报
"本文主要探讨了在Android应用开发中如何创建一个简单的短信发送小程序,并提供了一个带有广播接收者监听功能的增强版示例,适用于学习Android短信功能开发的开发者参考。" 在Android平台上,实现短信发送功能是常见的需求,这通常涉及到与系统自带的SMS服务进行交互。以下将详细讲解如何在Android应用中实现这一功能: 首先,我们需要创建一个Activity,这个Activity将包含用户界面元素,如输入电话号码和短信内容的EditText以及发送按钮。例如,在提供的代码中,`Send.java` 类继承自 `Activity`,并包含了对布局文件 `main.xml` 的引用,其中定义了UI组件。 ```java public class Send extends Activity { private String message; private String number; private EditText editText; private EditText editText2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 初始化EditText和Button editText = (EditText) findViewById(R.id.number); editText2 = (EditText) findViewById(R.id.message); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // 在这里处理点击事件,获取输入并发送短信 } }); } } ``` 当用户点击发送按钮时,会触发按钮的点击事件。在该事件中,我们需要获取EditText中的电话号码和短信内容,然后调用 `SmsManager` 类的静态方法来发送短信。`SmsManager` 是Android SDK提供的用于管理短信服务的类。 ```java public void onClick(View v) { number = editText.getText().toString(); message = editText2.getText().toString(); if (validateInputs()) { // 验证输入合法性 sendSMS(number, message); } else { Toast.makeText(this, "请输入有效的电话号码和短信内容", Toast.LENGTH_SHORT).show(); } } private boolean validateInputs() { // 验证号码和消息是否为空 return !number.isEmpty() && !message.isEmpty(); } private void sendSMS(String number, String message) { SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(number, null, message, getSentIntent(), getDeliveredIntent()); } ``` `sendTextMessage()` 方法用于发送短信,它接受四个参数:接收方电话号码、发送方的回执地址(通常为null)、短信内容、发送成功的PendingIntent和送达成功的PendingIntent。`getSentIntent()` 和 `getDeliveredIntent()` 分别用于设置短信发送成功和送达成功的回调。 为了监听短信的发送状态,我们可以创建BroadcastReceiver,这在示例中被称为“升级版”的短信发送功能。广播接收者可以在短信发送成功或失败时接收到系统广播,并做出相应处理,例如显示通知或者提示用户。 ```java private PendingIntent getSentIntent() { Intent sentIntent = new Intent("SMS_SENT"); return PendingIntent.getBroadcast(this, 0, sentIntent, PendingIntent.FLAG_UPDATE_CURRENT); } private PendingIntent getDeliveredIntent() { Intent deliveredIntent = new Intent("SMS_DELIVERED"); return PendingIntent.getBroadcast(this, 0, deliveredIntent, PendingIntent.FLAG_UPDATE_CURRENT); } // 注册BroadcastReceiver @Override protected void onResume() { super.onResume(); registerReceiver(sentReceiver, new IntentFilter("SMS_SENT")); registerReceiver(deliveredReceiver, new IntentFilter("SMS_DELIVERED")); } // 反注册BroadcastReceiver @Override protected void onPause() { super.onPause(); unregisterReceiver(sentReceiver); unregisterReceiver(deliveredReceiver); } // BroadcastReceiver实例 private BroadcastReceiver sentReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(context, "短信已发送", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(context, "发送失败:通用错误", Toast.LENGTH_SHORT).show(); break; // 其他错误情况... } } }; private BroadcastReceiver deliveredReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(context, "短信已送达", Toast.LENGTH_SHORT).show(); break; // 其他错误情况... } } }; ``` 以上就是Android开发中实现发送短信的基本步骤,包括用户界面的创建、短信的发送以及状态监听。需要注意的是,从Android 6.0(API级别23)开始,发送短信可能需要动态请求`SEND_SMS`权限,所以在运行时需要判断并请求此权限。同时,为了遵守Google Play的政策,确保用户知道应用会发送短信,最好在应用中添加适当的用户提示。