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 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:如何确保在应用未运行时也能接收短信?
答:为了确保在应用未运行时也能接收短信,可以在AndroidManifest.xml
中注册广播接收器,而不是动态注册,这样,即使应用未运行,系统也会调用广播接收器来处理短信到达事件。
问题2:如何处理短信中的多条消息?
答:当短信包含多条消息时,可以通过循环处理每一条消息,在processSms
方法中,遍历所有的PDU,并为每一条消息创建SmsMessage
对象,然后提取发送者和消息内容,这样可以确保所有消息都被正确处理。
以上内容就是解答有关“android收短信代码”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/627651.html