SmsManager
类,通过调用其
sendTextMessage()
方法,传入目的号码、短信内容等参数来发送短信。
1、添加必要的权限:
在AndroidManifest.xml
文件中添加以下权限,以确保应用有权发送和接收短信:
<uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" />
2、创建前端布局文件(XML):
在res/layout/activity_main.xml
中定义用户界面,包括用于输入电话号码和短信内容的EditText
控件,以及一个用于发送短信的Button
控件。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <EditText android:id="@+id/edPhone1" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入手机号码" android:inputType="phone" android:minHeight="48dp" /> <EditText android:id="@+id/edContent1" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="内容" android:inputType="textMultiLine" android:minHeight="48dp" /> <Button android:id="@+id/bt_sendSMSS" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送" /> </LinearLayout>
3、编写后端逻辑代码(Java/Kotlin):
在MainActivity.java
或MainActivity.kt
中实现发送短信的逻辑,获取用户输入的电话号码和短信内容,然后使用SmsManager
类发送短信。
public class MainActivity extends AppCompatActivity { private EditText edPhone; private EditText edContent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edPhone = findViewById(R.id.edPhone1); edContent = findViewById(R.id.edContent1); Button btSend = findViewById(R.id.bt_sendSMSS); btSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { sendSMS(); } }); } private void sendSMS() { String phoneNumber = edPhone.getText().toString(); String message = edContent.getText().toString(); if (!phoneNumber.isEmpty() && !message.isEmpty()) { SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phoneNumber, null, message, null, null); Toast.makeText(this, "短信已发送", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "请填写完整的信息", Toast.LENGTH_SHORT).show(); } } }
4、处理发送状态和广播监听:
为了知道短信是否成功发送,可以注册一个广播接收器来监听发送状态,这通常涉及到创建一个继承自BroadcastReceiver
的类,并在其中处理接收到的广播。
public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); SmsMessage[] msgs = new SmsMessage[pdus.length]; for (int i = 0; i < msgs.length; i++) { msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); String str = "SMS from " + msgs[i].getOriginatingAddress() + " : " + msgs[i].getMessageBody(); Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); } } } }
在AndroidManifest.xml
中注册这个广播接收器:
<receiver android:name=".SMSReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>
问题1:为什么需要在AndroidManifest.xml中添加权限?
答案:在AndroidManifest.xml中添加权限是为了告知系统您的应用需要访问哪些受保护的功能或数据,对于短信功能,您需要声明SEND_SMS
权限以允许应用发送短信,以及RECEIVE_SMS
权限以允许应用接收短信,这是出于安全考虑,确保用户知道并同意应用正在访问这些敏感功能。
问题2:如何处理短信发送失败的情况?
答案:短信发送可能会因为多种原因失败,如网络问题、设备存储空间不足或目标号码不存在等,为了处理这些情况,您可以在发送短信后检查返回值或注册一个广播接收器来监听发送状态,如果发送失败,您可以向用户显示一个错误消息,并提供重试选项或建议用户检查网络连接和设备设置。