zoukankan      html  css  js  c++  java
  • 22 接受收到短信广播

    • 权限:
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>

    意图

     <!-- 短信的广播Action -->
            <receiver android:name=".MySmsReceiver">
                <intent-filter >
                    <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
                </intent-filter>
            </receiver>

    结构:
    这里写图片描述

    MainActivity.java

    package com.qf.day22_broadcastreceiver_demo8;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
    }
    

    MySmsReceiver.java

    补充说明:因为当你发一条短信140个字符(70汉子)以上时会分为两条短息发送 所以收到是数组
    SmsMessage.createFromPdu((byte[])pdus[i]) 在API23过时

    package com.qf.day22_broadcastreceiver_demo8;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import android.annotation.SuppressLint;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.telephony.SmsMessage;
    import android.util.Log;
    
    public class MySmsReceiver extends BroadcastReceiver{
    
        @SuppressLint("NewApi")
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            /**
             * pdus:承载一条短信的所有内容的载体  一条短信 可以有140 字节
             */
            Bundle bundle = intent.getExtras();
            Object[]pdus =  (Object[]) bundle.get("pdus");
            //获取短信数组
            SmsMessage[] smsMessages = new SmsMessage[pdus.length];
            /*//高版本过时
            //将pdus里内容转换成SmsMessage
            for(int i=0;i<pdus.length;i++){
    
                smsMessages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
    
            }*/
            //高版本
            String format2 = intent.getStringExtra("format");
            //将pdus里内容转换成SmsMessage
            for(int i=0;i<pdus.length;i++){
                //高版本过时
                smsMessages[i] = SmsMessage.createFromPdu((byte[])pdus[i],format2);
    
            }
    
            //获取电话号
            String num = smsMessages[0].getOriginatingAddress();
            //获取发送短信的时间戳
            long t = smsMessages[0].getTimestampMillis();
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            String time = format.format(new Date(t));
            //获取短信的所有内容
            StringBuffer stringBuffer = new StringBuffer();
            for(int i=0;i<smsMessages.length;i++){
                stringBuffer.append(smsMessages[i].getDisplayMessageBody());
            }
            String body = stringBuffer.toString();
    
            Log.e("AAA", "==num=="+num+"==time=="+time+"==body=="+body);
    
    
    
        }
    
    }
    
  • 相关阅读:
    codeblocks 配置
    2020-7-28
    echarts markPoint在极坐标散点图中不显示value值
    Oracle cve 2020-14644 分析利用以及回显思路
    Openfire Admin Console SSRF&任意文件读取漏洞 CVE-2019-18394 CVE-2019-18393 poc
    Shiro 回显利用工具(burp
    java反序列化提取payload之Xray高级版的shiro回显poc的提取过程
    CVE-2020-3452 CISCO ASA远程任意文件读取 poc
    记事本陈列-历届数学建模大赛优秀论文(含国赛、美赛、研赛)目录
    懒人必备 |通过爬虫 筛选以及查看CSDN 满足相应积分的资源列表 简单好用
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152191.html
Copyright © 2011-2022 走看看