如何编写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

相关推荐

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

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

    2024-11-03
    011
  • 如何在Android设备上开启网络权限?

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

    2024-11-03
    011
  • android_activity_

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

    2024-06-08
    056

发表回复

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

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