SMS_SUCCESS
(值为0):短信发送成功。,ERROR_INVALID_ARGUMENTS
(值为-1):无效的参数。,ERROR_NO_SMS_PERMISSION
(值为-2):没有短信权限。,ERROR_PHONE_NUMBER_BLOCKED
(值为-3):电话号码被阻止。,ERROR_NULL_PDU
(值为-4):PDU为空。,ERROR_RADIO_NOT_AVAILABLE
(值为-5):无线电不可用。,ERROR_CALL_IN_PROGRESS
(值为-6):通话正在进行中。,ERROR_SIM_ABSENT
(值为-7):SIM卡不存在。,ERROR_SIM_FULL
(值为-8):SIM卡已满。,ERROR_NETWORK_BUSY
(值为-9):网络繁忙。,ERROR_GENERIC_FAILURE
(值为-10):通用失败。Android发送短信返回值详解
在Android应用开发中,发送短信是一项常见的功能需求,为了实现这一功能,开发者通常会使用SmsManager类来发送短信,了解发送短信的返回值对于处理发送状态和错误至关重要,本文将详细解析Android发送短信的返回值,并通过单元表格的形式展示不同返回值的含义及其处理方法。
一、SmsManager.RESULT_*常量解析
在Android中,SmsManager.RESULT_
常量用于表示发送短信的结果,以下是一些关键的常量及其含义:
常量名称 | 含义 |
SmsManager.RESULT_SMS_SUCCESS | 短信成功发送到目标号码。 |
SmsManager.RESULT_MMS_SUCCESS | 多媒体短信(MMS)成功发送到目标号码。 |
SmsManager.RESULT_ERROR_NO_SERVICE | 设备没有信号或未连接到移动网络。 |
SmsManager.RESULT_ERROR_NULL_PDU | 提供的PDU为null,无法发送短信。 |
SmsManager.RESULT_ERROR_GENERIC_FAILURE | 发送短信时发生未知错误。 |
SmsManager.RESULT_ERROR_RADIO_OFF | 设备的无线功能被关闭,无法发送短信。 |
SmsManager.RESULT_ERROR_SIM_ABSENT | 设备中没有插入SIM卡,无法发送短信。 |
SmsManager.RESULT_ERROR_SIM_LOCKED | SIM卡被锁定,无法发送短信。 |
SmsManager.RESULT_ERROR_NO_MEMORY | 设备内存不足,无法发送短信。 |
SmsManager.RESULT_ERROR_OOM | 由于内存溢出,无法发送短信。 |
SmsManager.RESULT_ERROR_UNABLE_TO_CONNECT | 无法连接到移动网络,可能是由于网络问题或设备设置问题。 |
二、发送短信示例代码及返回值处理
以下是一个使用SmsManager发送短信的示例代码,以及如何处理不同的返回值:
import android.telephony.SmsManager; import android.content.Context; import android.widget.Toast; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String phoneNumber = "1234567890"; // 替换为目标手机号码 String message = "Hello, this is a test SMS!"; sendSMS(phoneNumber, message); } private void sendSMS(String phoneNumber, String message) { SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phoneNumber, null, message, null, null); } }
在上述代码中,我们调用了SmsManager
的sendTextMessage
方法来发送短信,这个方法接受五个参数:目标手机号、短信中心号码(通常为null)、短信内容、一个PendingIntent(用于接收发送状态),以及一个Handler(用于处理超时),在这个例子中,我们将PendingIntent和Handler都设置为null,因为我们将在后续步骤中手动检查发送状态。
三、处理发送状态
为了处理发送状态,我们需要创建一个BroadcastReceiver来监听发送结果,以下是如何创建和使用BroadcastReceiver来处理发送状态的示例代码:
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.SmsManager; import android.widget.Toast; public class SmsSentReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(context, "SMS sent successfully!", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(context, "Generic failure", Toast.LENGTH_SHORT).show(); break; // 其他错误处理... default: Toast.makeText(context, "Error code: " + getResultCode(), Toast.LENGTH_SHORT).show(); break; } } }
在MainActivity中注册这个BroadcastReceiver:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String phoneNumber = "1234567890"; // 替换为目标手机号码 String message = "Hello, this is a test SMS!"; sendSMS(phoneNumber, message); } private void sendSMS(String phoneNumber, String message) { SmsManager smsManager = SmsManager.getDefault(); Intent sentIntent = new Intent(this, SmsSentReceiver.class); PendingIntent piSend = PendingIntent.getBroadcast(this, 0, sentIntent, 0); smsManager.sendTextMessage(phoneNumber, null, message, piSend, null); }
通过这种方式,我们可以捕获并处理短信发送的各种结果,从而为用户提供更好的反馈和错误处理机制。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1264408.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复