Android studio之广播监听接收短信

一. 在清单文件中(AndroidManifest.xml)添加短信权限

这里我用的android studio版本是3.3的

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

二.3.2以上的android studio可直接新建广播SMSReceiver类

注意(这里新建的广播类,它默认为静态广播,所以在清单文件会自动生成以下代码)

<!-- <receiver --><!-- android:name=".SMSReceiver" --><!-- android:enabled="true" --><!-- android:exported="true"> --><!-- <intent-filter android:priority="20"> --><!-- <action android:name="android.provider.Telephony.SMS_RECEIVED"/> --><!-- </intent-filter> --><!-- </receiver> -->

我用的是动态注册广播,这里注释掉

直接上广播类SMSReceiver的代码public String msgBody="";


public String originatingAddress="";

Context context;
public SMSReceiver(Context context){
    this.context=context;
}
@Override
public void onReceive(Context context, Intent intent) {
    String action =  intent.getAction();
    if(action.equals("android.provider.Telephony.SMS_RECEIVED")) {
        //获取短信内容,有可能一次发来多条短信
        Object[] objects = (Object[]) intent.getExtras().get("pdus");
        for (Object obj : objects) {
            //获取短信对象
            SmsMessage msg = SmsMessage.createFromPdu((byte[]) obj);
            //获取短信内容
            msgBody = msg.getDisplayMessageBody();
            //获取发信人的电话号码
            originatingAddress = msg.getOriginatingAddress();
            Log.i("wk", "短信内容==>" + msgBody + " 来自==>" + originatingAddress);
            Toast.makeText(context,"短信内容==>" + msgBody + " 来自==>" + originatingAddress,Toast.LENGTH_SHORT).show();
        }
    }
}

三.  注册动态广播,并申请系统短信权限

SMSReceiver smsReceiver=new SMSReceiver(SMSActivity.this);

//动态注册广播
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(smsReceiver,intentFilter);
 
/**
 * * 检查申请短信权限
 * */
private void checkSMSPermission() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS)  != PackageManager.PERMISSION_GRANTED) {
        //未获取到读取短信权限
        Toast.makeText(this,"未获取权限",Toast.LENGTH_SHORT).show();
        // 向系统申请权限
        ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_SMS}, REQ_CODE_CONTACT);
    } else
        {
            query();
        }
}
@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

    super.onRequestPermissionsResult(requestCode, permissions, grantResults);    //判断用户是否,同意 获取短信授权    if (requestCode == REQ_CODE_CONTACT && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {        //获取到读取短信权限        query();    } else {        Toast.makeText(this, "未获取到短信权限", Toast.LENGTH_SHORT).show();    }

}
 
 
//根据之前在广播类公有属性短信内容和短信来源,在activity界面可以直接获取,并读取显示
//显示最近一条信息
private void dispLast(){
       String msg=smsReceiver.msgBody;
       String originatingAddress=smsReceiver.originatingAddress;
      edit_sms.setText("短信内容==>" + msg + " 来自==>" + originatingAddress);
}
 

原文地址:https://www.cnblogs.com/HYV587/p/11794932.html

时间: 2024-10-07 04:21:40

Android studio之广播监听接收短信的相关文章

Android 监听系统短信广播

使用场景: 1.对系统接收到的短信进行识别,是广告或者是诈骗等 2.对短信内容进行过滤或者是对内容进行提取,比如验证码提取 3.对系统短信进行拦截,连系统自己都不让收到了(不会出现在系统数据里面,也不会有系统短信的通知栏提示) 备注: 1.系统短信广播为有序广播,要拦截的话,需要在注册广播的时候设置广播优先级为最大,不过这种也有风险,如果被其他的应用先拦截了,那么我们将不再收到,使用时需注意. 2.要接到系统短信广播,那么应用必须具备短信读取权限,这对使用者来说可能是一个限制 3.除了短信读取权

通过ContentResolver监听系统短信变化

需要有读取短信的权限 <uses-permission android:name="android.permission.READ_SMS"/> ContentResolver注册一个内容观察者 ContentObserver内容观察者监听系统短信的变化 通过ContentResolver来获取短信内容提供者提供的短信信息 package com.heima.jiantingSms; import android.app.Activity; import android.c

Android手机使用广播监听手机收到的短信

我们使用的Android手机在收到短信的时候会发出一条系统广播.该条广播中存放着接收到的短信的详细信息.本文将详细介绍如何通过动态注册广播来监听短信. 注册广播有两种方式,一种是动态注册,另一种是静态注册.动态注册,顾名思义就是在程序运行时注册的,需要用到广播的时候就注册,用完即销毁.静态注是在AndroidManifest.xml中注册的,在<application>中使用<receiver>标签注册. 那么如何创建一个监听短信的广播接收器呢,其实只需要新建一个类,让这个类继承B

Android 监听SMS短信

当设备接收到一条新的SMS消息时,就会广播一个包含了android.provider.Telephony.SMS_RECEIVED动作的Intent.注意,这个动作是一个字符串值,SDK 1.0不再包含对这个字符串的引用,因此,在你的应用程序中,你需要显式的指定它. 对于应用程序监听SMS Intent广播,首先需要添加RECEIVE_SMS权限.通过在应用程序manifest中添加一个uses-permission,如下面的片段所示: <uses-permission android:name

Android专题7——如何用BroadcastReceiver接收短信

背景知识: 安卓系统在收到短信时,会发出一个广播Intent,动作名称为android.provider.Telephony.SMS_RECEIVED Intent中的pdus(Object[])中存放短信内容 <action android:name="android.provider.Telephony.SMS_RECEIVED"/> <uses-permission android:name="android.permission.RECEIVE_SM

外部类监听发送短信--------------------------setOnLongClickListener------------------------

定义了两个Java.一个作为事件监听器发送短信.MainActivity调用它. ---------------------------外部类监听器------------------- SendSMsListener.java package com.example.admin.webchanjian; import android.app.Activity;import android.app.PendingIntent;import android.content.Intent;impor

android动态注册广播监听服务demo

服务类,一定要在清单文件中注册 public class lightService extends Service { private boolean ifrun = false; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { super.onCreate(); System.

Android利用广播监听按下HOME和电源键

package cc.testhome; import cc.testhome.HomeKeyObserver.OnHomeKeyListener; import cc.testhome.PowerKeyObserver.OnPowerKeyListener; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * 利用广播监听Home键的按下和长按Home键 * 利用广播监听电源键的按下(关闭屏幕) * *

Android开发之使用广播监听网络状态变化

我们经常需要判断网络状态的变化,如有无网络,所以需要监听网络状态的变化,比如网络断开,网络连接给予友好提示.如何监听网络状态的变化呢,最近工作中需要用到这个,于是就用广播机制来实现了网络状态的监听. 使用广播机制来监听网络状态主要涉及到以下几点: 1.需要自己编写个网络广播接收器,该接收器继承BroadcastReceiver类,用来接收系统发出的广播.比如我自己写了个NetStatusReceiver广播接收器.代码如下: package com.log.system; import andr