如何在Android中监听短信状态?

在Android开发中,监听短信发送状态是一个常见需求,实现这一功能需要通过广播接收器(BroadcastReceiver)来监听系统发送的短信广播,以下是详细的步骤和代码示例:

如何在Android中监听短信状态?

一、添加权限和依赖项

需要在AndroidManifest.xml文件中添加发送短信的权限:

<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />

需要在应用的build.gradle文件中添加必要的依赖项:

dependencies {
    implementation 'com.android.support:support-annotations:28.0.0'
}

二、创建发送短信的方法

MainActivity中创建一个方法,用于发送短信并设置监听器:

public class MainActivity extends AppCompatActivity {
    private TextView status;
    private EditText phone, content;
    private Button sendButton;
    private myServiceReceiver mReceiver01, mReceiver02;
    private String SMS_SEND_ACTION = "SMS_SEND_ACTION";
    private String SMS_DELIVERED_ACTION = "SMS_DELIVERED_ACTION";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        status = findViewById(R.id.textview01);
        phone = findViewById(R.id.phone);
        content = findViewById(R.id.smscontent);
        sendButton = findViewById(R.id.send);
        mReceiver01 = new myServiceReceiver();
        mReceiver02 = new myServiceReceiver();
        sendButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String phoneNumber = phone.getText().toString().trim();
                String message = content.getText().toString().trim();
                sendSMS(phoneNumber, message);
            }
        });
    }
    private void sendSMS(String phoneNumber, String message) {
        SmsManager smsManager = SmsManager.getDefault();
        Intent itSend = new Intent(SMS_SEND_ACTION);
        Intent itDeliver = new Intent(SMS_DELIVERED_ACTION);
        PendingIntent sendPI = PendingIntent.getBroadcast(this, 0, itSend, 0);
        PendingIntent deliverPI = PendingIntent.getBroadcast(this, 0, itDeliver, 0);
        smsManager.sendTextMessage(phoneNumber, null, message, sendPI, deliverPI);
        status.setText("短信正在发送中...");
    }
}

三、注册并创建监听发送状态的BroadcastReceiver

如何在Android中监听短信状态?

创建一个自定义的BroadcastReceiver类,用于监听短信发送状态:

public class myServiceReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        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;
            case SmsManager.RESULT_ERROR_NO_SERVICE:
                Toast.makeText(context, "短信发送失败,无服务", Toast.LENGTH_SHORT).show();
                break;
            case SmsManager.RESULT_ERROR_NULL_PDU:
                Toast.makeText(context, "短信发送失败,PDU为空", Toast.LENGTH_SHORT).show();
                break;
            case SmsManager.RESULT_ERROR_RADIO_OFF:
                Toast.makeText(context, "短信发送失败,无线电关闭", Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

四、动态注册和反注册广播接收器

MainActivity中动态注册和反注册广播接收器:

@Override
protected void onResume() {
    super.onResume();
    registerReceiver(mReceiver01, new IntentFilter(SMS_SEND_ACTION));
    registerReceiver(mReceiver02, new IntentFilter(SMS_DELIVERED_ACTION));
}
@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(mReceiver01);
    unregisterReceiver(mReceiver02);
}

五、相关问题与解答

问题1:如何确保短信发送状态能够被正确监听?

答:确保在AndroidManifest.xml文件中声明了所需的权限,并在MainActivity中正确注册和反注册广播接收器,检查BroadcastReceiver中的onReceive方法是否正确处理不同的结果码。

如何在Android中监听短信状态?

问题2:如何处理短信发送失败的情况?

答:在BroadcastReceiveronReceive方法中,根据getResultCode()返回的结果码进行处理,对于RESULT_ERROR_GENERIC_FAILURE,可以提示用户“短信发送失败,通用错误”,对于其他错误码,也可以进行相应的处理。

到此,以上就是小编对于“android监听短信状态”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/638876.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seoK-seo
Previous 2024-11-10 23:47
Next 2024-11-10 23:55

相关推荐

  • ubuntu终端怎么打开

    Ubuntu终端,也被称为命令行界面(CLI),是Ubuntu操作系统的核心部分,它允许用户通过键入文本命令来与计算机进行交互,而不是使用图形用户界面(GUI),尽管对于新手来说,可能会觉得有些复杂,但是一旦掌握了基本的命令,你会发现它是一个非常强大的工具。打开Ubuntu终端的方法有很多种,以下是其中的一些:1. 快捷键:在大多数U……

    2023-12-04
    0531
  • pythonweb服务器部署

    Python Web服务器在现代互联网应用中,Web服务器扮演着至关重要的角色,它们负责处理来自客户端的请求,并将响应返回给客户端,Python作为一种广泛使用的编程语言,也提供了多种Web服务器实现,本文将介绍如何使用Python搭建一个简单的Web服务器,并探讨一些常见的技术细节。1、使用Python内置的HTTP服务器Pytho……

    2024-01-25
    0189
  • 如何将服务器硬盘改造为移动硬盘?

    服务器硬盘做移动硬盘在现代数据存储和管理中,将服务器硬盘转变为移动硬盘是一种常见需求,这不仅能够提高数据的便携性,还能延长硬盘的使用寿命,本文将详细介绍如何将服务器硬盘转换为移动硬盘的步骤和注意事项,一、准备工作1、确认硬盘类型:首先需要确认服务器硬盘的类型,常见的有SATA、SAS和SCSI等,不同类型的硬盘……

    2024-12-23
    05
  • 查看出口ip地址

    什么是出口IP?出口IP,即外部网络接口IP地址,是指在局域网内部的设备通过路由器或交换机连接到互联网时,所使用的IP地址,这个IP地址是在互联网上唯一的,用于标识局域网内的设备在互联网上的位置,当我们访问一个网站或者使用网络服务时,实际上是通过出口IP进行请求转发的,了解出口IP对于网络管理员和普通用户来说都是非常重要的。如何查看出……

    2024-01-30
    0916
  • cdn专线「公网cdn和专网cdn什么区别」

    随着互联网的快速发展,内容分发网络(Content Delivery Network,简称CDN)已经成为了网站和应用的重要组成部分,CDN通过将静态内容缓存到全球各地的服务器上,使得用户可以从最近的服务器获取内容,从而提高了网站的访问速度和稳定性,根据CDN的服务对象和部署方式,CDN可以分为公网CDN和专网CDN,本文将对这两种C……

    2023-11-07
    0182
  • 服务器快捷重启

    服务器快捷重启是一种方便、快速的重启方式,可以节省时间和提高效率。

    2024-01-19
    0232

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入