如何编写Android代码来接收短信?

Android收短信代码

如何编写Android代码来接收短信?

在Android开发中,接收短信是一项常见的功能,本文将详细介绍如何在Android应用中实现接收短信的功能,包括权限申请、广播接收器、以及如何处理收到的短信。

权限申请

要在Android应用中接收短信,首先需要在AndroidManifest.xml文件中声明所需的权限:

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

创建广播接收器

需要创建一个广播接收器来监听短信到达事件,在AndroidManifest.xml中注册广播接收器:

<receiver android:name=".SmsReceiver">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
    </intent-filter>
</receiver>

创建一个名为SmsReceiver的类:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;
public class SmsReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                Object[] pdus = (Object[]) bundle.get("pdus");
                for (Object pdu : pdus) {
                    SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdu);
                    String sender = sms.getOriginatingAddress();
                    String message = sms.getMessageBody();
                    Toast.makeText(context, "From: " + sender + "
Message: " + message, Toast.LENGTH_LONG).show();
                }
            }
        }
    }
}

在上面的代码中,我们通过SmsMessage.createFromPdu方法解析短信内容,并使用Toast显示短信的发送者和消息内容,你可以根据需要对短信内容进行进一步处理,例如存储到数据库或执行特定操作。

4. 动态申请权限(针对Android 6.0及以上)

如何编写Android代码来接收短信?

从Android 6.0开始,用户需要在运行时授予权限,需要在代码中动态申请接收短信的权限:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECEIVE_SMS}, REQUEST_CODE_PERMISSION);
}

并在onRequestPermissionsResult方法中处理用户的响应:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == REQUEST_CODE_PERMISSION && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        // 权限被授予,可以继续接收短信
    } else {
        // 权限被拒绝,无法接收短信
    }
}

完整示例代码

以下是一个完整的示例代码,展示了如何在Android应用中接收和处理短信:

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.smsreceiver">
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
    <application ... >
        <receiver android:name=".SmsReceiver">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter>
        </receiver>
    </application>
</manifest>

SmsReceiver.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.telephony.SmsMessage;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.widget.Toast;
public class SmsReceiver extends BroadcastReceiver {
    private static final int REQUEST_CODE_PERMISSION = 100;
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (ContextCompat.checkSelfPermission(context, Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.RECEIVE_SMS}, REQUEST_CODE_PERMISSION);
                } else {
                    processSms(context, intent);
                }
            } else {
                processSms(context, intent);
            }
        }
    }
    private void processSms(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            Object[] pdus = (Object[]) bundle.get("pdus");
            for (Object pdu : pdus) {
                SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdu);
                String sender = sms.getOriginatingAddress();
                String message = sms.getMessageBody();
                Toast.makeText(context, "From: " + sender + "
Message: " + message, Toast.LENGTH_LONG).show();
            }
        }
    }
}

相关问题与解答

问题1:如何确保在应用未运行时也能接收短信?

如何编写Android代码来接收短信?

答:为了确保在应用未运行时也能接收短信,可以在AndroidManifest.xml中注册广播接收器,而不是动态注册,这样,即使应用未运行,系统也会调用广播接收器来处理短信到达事件。

问题2:如何处理短信中的多条消息?

答:当短信包含多条消息时,可以通过循环处理每一条消息,在processSms方法中,遍历所有的PDU,并为每一条消息创建SmsMessage对象,然后提取发送者和消息内容,这样可以确保所有消息都被正确处理。

以上内容就是解答有关“android收短信代码”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。

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

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
Previous 2024-11-05 09:38
Next 2024-11-05 09:43

相关推荐

  • APK如何获取并管理网络访问权限?

    Android系统中的网络权限指的是应用程序访问互联网并执行网络操作的权限,这一权限允许APP进行发送和接收数据等需要联网才能完成的任务,通常在应用权限列表中显示为“拥有完全的网络访问权限”,而在安卓清单文件(AndroidManifest.xml)中则被称为“android.permission.INTERN……

    2024-12-03
    05
  • 如何更改手机应用的网络权限设置?

    在移动应用开发中,获取网络权限是一个常见需求,不同平台(如Android和iOS)有不同的方式来实现这一点,以下是如何在这两个主要平台上处理网络权限的详细步骤:Android1、声明权限: 在你的AndroidManifest.xml文件中添加以下权限声明: <uses-permission androi……

    2024-12-06
    06
  • 如何在Android设备上开启网络权限?

    Android开启网络权限在现代移动应用开发中,网络访问权限是至关重要的一环,Android操作系统通过权限机制来控制应用程序对设备资源的访问,包括网络资源,本文将详细介绍如何在Android应用中开启网络权限,包括其必要性、实现方法以及一些常见问题的解决方案,一、网络权限的必要性网络权限允许应用程序通过互联网……

    2024-11-03
    041
  • Android设备如何实现开机自启动应用?——一份详细示例分享

    Android 开机自启动App示例分享在Android设备上,实现应用的开机自启动是一项常见需求,本文将详细介绍如何通过编程实现这一功能,并提供相应的代码示例和注意事项,一、什么是开机自启动?开机自启动指的是当Android设备重新启动时,某个应用能够自动启动并运行特定的任务或服务,这通常用于需要持续后台运行……

    2024-11-03
    027
  • App网络权限究竟是什么含义?

    什么是App网络权限?一、App网络权限的定义与作用App网络权限是指应用程序访问互联网并执行各种网络操作的权限,它允许应用程序发送和接收数据、访问网络资源、进行远程通信等,这一权限在现代智能手机应用中至关重要,因为许多功能和服务都需要联网才能实现,如在线浏览、社交媒体互动、实时通讯、云存储同步等,二、如何检查……

    2024-11-28
    03
  • android_activity_

    Android_activity_是Android开发中的一个基本组件,用于表示应用程序中的一个屏幕或页面。

    2024-06-08
    056

发表回复

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

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