好久没写了,最近学习Android的相关知识,包括UI组件与布局、Activity生命周期等,而这次要讲的是,Broadcast Receiver的相关知识,主要是接收发短信,SmsManager、SmsManages的使用。还有就是这里涉及到的权限问题,在清单文件中加入相关的权限,还有就是运行权限。具体请看下面例子:

发短信(SmsManager):

发短信比较简单,我们可以定义一个类,通过传参(包括号码与内容)的方式进行进一步操作。

import android.telephony.SmsManager;
import java.util.ArrayList;

public class SendMsg {
    String message;
    String phone;

public SendMsg(String message, String phone) {
        this.message = message;
        this.phone = phone;
        SmsManager smsManager = SmsManager.getDefault();
        ArrayList<String> list = smsManager.divideMessage(message);
        for (String text:list) {
            smsManager.sendTextMessage(phone, null, text, null, null);
        }
    }
}

在manifest清单文件中加入

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

在主MainActivity中加入运行权限

...

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

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

}

接着就是重写onRequestPermissionsResult

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case 1:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //这里写操作 如send(); send函数中New SendMsg (号码,内容);
            } else {
                Toast.makeText(this, "你没启动权限", Toast.LENGTH_SHORT).show();
            }
            break;

default:
    }
}

在接下来就是接收短信,方式有很多这里就不一一介绍了,主要讲讲使用Broadcast。而设计到广播,就需要了解广播的相关知识,具体不会讲很多以后慢慢更新。

广播需要创建一个Receiver进行监听短信的查收。如下:

import...

public class SMSReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

String phone = "10086";

String num, con;
//读取data中存入的安全号码
Bundle bundle = intent.getExtras();
if (bundle != null) {
    Object[] objs = (Object[]) bundle.get("pdus");
    SmsMessage[] smsMessages = new SmsMessage[objs.length];
    for (int i = 0; i < objs.length; i++) {
        smsMessages[i] = SmsMessage.createFromPdu((byte[]) objs[i]);
        num = smsMessages[i].getDisplayOriginatingAddress(); //短信的号码
        con = smsMessages[i].getDisplayMessageBody(); //短信的内容

Toast.makeText(context, num + "----" + con, Toast.LENGTH_SHORT).show();

System.out.println("号码:" + num + "内容:" + con);
        SendMsg sendMsg = new SendMsg("号码:" + num + "内容:" + con, phone);

if (num.equals(phone)) {

//这里可以写一些自己的其他操作 (如包括匹配相应的号码进行操作)

}

}
        abortBroadcast();  //这里是对短信进行拦截但是并不能实现
    }
}

写完receiver之后就可以进行注册(静态与动态),这里就写静态了如下:

<receiver
    android:name=".SMSReceiver"
    android:enabled="true"
    android:exported="true">
     <intent-filter android:priority="1000"> <!-- 这是优先权--!>
        <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
     </intent-filter>
</receiver>

上面的intent-filter便是静态注册了,打开APP便进行短信监听

还有就是权限问题:

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

运行权限:

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

onRequestPermissionsResult方法如上

转载于:https://www.cnblogs.com/llw1996/p/6721348.html

Android——SMS接收发短信与运行权限相关推荐

  1. android虚拟机接收真实短信,向Android模拟器打电话发短信的简单方法

    在开发android应用程序时,有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应.譬如编写一个广播接收器,来提示用户有短信收到或者处理短信,就需要向该手机发送短信来进行测试.这 ...

  2. android 发送短信 广播 demo,向Android模拟器打电话发短信的简单方法

    在开发android应用程序时,有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应.譬如编写一个广播接收器,来提示用户有短信收到或者处理短信,就需要向该手机发送短信来进行测试.这 ...

  3. android 模拟器实现发短信

    题目:Android 模拟器实现发短信 时间:2019.3.7 内容介绍:创建两个Android模拟器,通过一个与另一个进行短信交流.模拟器界面包括两个输入框和一个按钮.在第一个框中输入电话号码,第二 ...

  4. 向Android模拟器打电话发短信的简单方法

    在开发android应用程序时,有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应.譬如编写一个广播接收器,来提示用户有短信收到或者处理短信,就需要向该手机发送短信来进行测试.这 ...

  5. android通话记录列表apk,android打电话,发短信,获取通讯录、通话记录、短信记录...

    [实例简介] 代码实现android打电话,发短信,获取通讯录.通话记录.短信记录 [实例截图] [核心代码] 19287b5f-b70c-4210-ab04-9d24ddd60788 └── cal ...

  6. android打电话、发短信实现

    打电话: Intent intent = newIntent(Intent.ACTION_CALL,Uri.parse("tel:"+"156666666666" ...

  7. Android 2.3发短信详细流程

    在android中,APP通过SmsManager.java一系列方法实现发送短信的功能,而发送的内容有很很多种,比如sendTextMessage.sendMultipartTextMessage. ...

  8. Android安卓——实现发短信功能的代码

    本处给出的是简单的发短信的笼统代码过程,可根据自己的知识,结合起来进行完善. 在配置文件中给权限配置 <uses-permission android:name="android.pe ...

  9. SMS平台发短信的代码

    首先去SMS注册一下,得到用户名和密钥.然后用以下代码,即可以发短信了.http://sms.webchinese.cn/api.shtml package com.SmsTest.Test; imp ...

最新文章

  1. Vue 生命周期记录_学习笔记
  2. 神经网络与原子轨道线性组合算法LCAO
  3. Oracle 发布基于 VS Code 的开发者工具,轻松连接 Oracle 数据库
  4. 什么样的架构师才是真正的架构师?
  5. 东北大学c语言及程序设计题库,东北大学c语言编程试题及其答案
  6. C++ MFC WebBrowser 探索(二)
  7. Azure 托管镜像和非托管镜像对比
  8. cxgrid 列显示格式右对齐_Excel中的单元格合并和格式合并,职场办公效率提升必备技能...
  9. 用Cython编译Python的C扩展
  10. ubunt18 mysql_Ubuntu18.04下安装MySQL教程
  11. VS2010 C++环境下DLL和LIB文件目录及名称修改
  12. 自然语言处理(八)——语言模型性能评价
  13. 2019/07/08 分布式文件系统概述(01)
  14. 8路开关量输入8路继电器输出的网络模块
  15. WiFi管理帧(四)(TWT)
  16. EDP to LVDS转换设计电路|EDP to LVDS转接板电路|Capstone/CS5211芯片电路原理图参考
  17. iPhone忘记访问限制密码的解决方案
  18. Science重磅:颠覆教科书!科学家找到癌症发生源头,治愈肿瘤有了新思路
  19. 解决谷歌浏览器提示Google账号无法登录提示浏览器或应用不安全问题
  20. 维恩贝特面试JAVA后台开发

热门文章

  1. css阵列,CSS3简单的圆点阵列旋转加载动画
  2. python如何实现循环_如何构造python循环
  3. linux 下载python命令_Linux下修改Python命令的方法示例(附代码)
  4. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_第十章:利用Python实现朴素贝叶斯模型
  5. 数据挖掘常用聚类算法性能比较
  6. python 模拟键盘_Python模拟键盘输入和鼠标操作
  7. 系统学习深度学习(七)--主流深度学习开源框架对比
  8. python 中的坦克大战0.1版本
  9. pmos低电平驱动_三极管和MOS管驱动电路的正确用法
  10. Linux wget命令入门