如何在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-seo的头像K-seoSEO优化员
Previous 2024-11-10 23:47
Next 2024-11-10 23:55

相关推荐

  • 主机cdn

    主机CDN(Content Delivery Network)是一种网络技术,它通过在各地部署服务器节点,将主机CDN(Content Delivery Network)是一种网络技术,它通过在各地部署服务器节点,将网站的内容分发到离用户最近的节点,使用户可以更快地获取到所需的内容,这种技术可以大大提高网站的访问速度和稳定性,提升用户……

    2023-11-14
    0126
  • 网页设计用什么做动态效果,什么是web动态网页设计(网页设计动态效果怎么制作)

    1、页面动态效果是网页的代码都在页面中,不需要执行asp,php,jsp,.net等程序生成客户端网页代码的网页,2、ASP是ActiveServerPages的简称,是微软开发的服务器端脚本环境,它内含于IIS或PWS中,提供一个用于服务器端脚本执行的环境,以此来实现动态交互的目的,这也是许多动态网页技术的共同特征,本章内容均围绕IIS来进行讲解,PWS的内容与此大致相同,3、动态网页是个广

    2023-12-13
    0130
  • 邢台建站公司

    邢台建站公司是一家专业从事网站建设、网站设计、网站优化、网站推广等服务的公司,以专业、高效、创新为宗旨。

    2024-04-20
    0107
  • 给服务器套住宅ip

    CDN,全称Content Delivery Network,中文名为内容分发网络,它是一种通过在各地部署节点服务器来缓存和分发内容的网络技术,CDN的主要目标是通过减少网络延迟,提高网站访问速度,改善用户体验,它还可以减轻源服务器的压力,提高网站的稳定性和可靠性,本文将详细介绍如何给服务器套CDN,以及CDN的优势和使用方法。我们需……

    2023-12-11
    0181
  • FTECH : 10$/月/2C2G20G硬盘/越南FPT/ODS/100M端口不限流量

    FTECH是一家提供服务器租用服务的公司,其产品具有性价比高、配置灵活等特点,本文将详细介绍FTECH的一款产品:10$/月/2C2G20G硬盘/越南FPT/ODS/100M端口不限流量,帮助大家了解这款产品的特点和优势。产品简介1、价格:10$/月2、配置:2核CPU、2GB内存、20GB硬盘、100M端口不限流量3、机房:越南FP……

    2024-01-12
    0138
  • CS游戏中,玩家为何会被踢出服务器?

    CS玩家被服务器踢出可能是由于网络连接问题、作弊行为、服务器超载、违反游戏规则或计算机硬件和软件问题等原因导致的。

    2024-10-30
    010

发表回复

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

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