Android BroadcastReceiver接收收到短信的广播

所属分类: 软件编程 / Android 阅读数: 39
收藏 0 赞 0 分享

一、知识介绍

  1、broadcastReceiver是广播接受者,四大组件之一。

  2、Android中内置了很多系统级别的广播,可以在应用程序中得到各种系统的状态信息。

  3、使用场景:

  ①当手机没有电时,会告知用户“电量低”的广播信息。可以做到正在使用的app就会接收到这个广播消息,如果是游戏可能是提醒保存数据,如果是正在使用的工作软件,可能提醒接上电源。

  【提示】对于某某程序来说,可以选择接收这一消息也可以选择不接收这个消息。

  ②手机的storage不够了,提示你清理空间,否则应用程序将变慢或者无法使用。

  ③手机一开机,某某程序就自动运行,QQ、微信都是开机自启。

  4、一个程序发出广播信息,一个程序接收广播信息,所以至少需要2个程序才能完成一发一收。发的一方,叫广播发送方;收的一方,叫广播接收者。

  5、广播接受者需要进行注册。动态注册,静态注册(在AndroidManiFest文件中)  

二、项目实践

【步骤】
  ①定义广播接受者

  ②进行注册,添加过滤器 intent-filter,接收特定的广播

  ③重写onReceiver方法,如果执行,代表已经接收到广播

  ④定义收到信息广播接收者,属于系统广播,则需要申请权限(静态,动态)

【项目结构】

【提示】创建Receiver可以通过以下方式
    此方法会自动在AndroidManifest中进行注册receiver,但是需要接收固定的广播,仍需添加intent-filter

 【AndroidManifest】  

<receiver
  android:name=".receiver.MsgReceiver"
  android:enabled="true"
  android:exported="true">
 <intent-filter>
  <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
    <!--接收收到信息的广播-->
  </intent-filter>
</receiver>

【MsgReceiver】

重写onReceiver方法,添加Toast

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MsgReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
    // TODO: This method is called when the BroadcastReceiver is receiving
    // an Intent broadcast.
    Toast.makeText(context, "收到信息", Toast.LENGTH_SHORT).show();
    //添加Toast便于观察
  }
} 

【添加权限】

①静态权限:【AndroidManifest】   

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

②动态权限【MainActivity】

import android.Manifest;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

    if (ActivityCompat.checkSelfPermission(MainActivity.this,
        Manifest.permission.READ_SMS)!= PackageManager.PERMISSION_GRANTED||
        ActivityCompat.checkSelfPermission(MainActivity.this,Manifest.permission.RECEIVE_SMS)
        !=PackageManager.PERMISSION_GRANTED){
      ActivityCompat.requestPermissions(MainActivity.this,
          new String[]{Manifest.permission.READ_SMS,Manifest.permission.RECEIVE_SMS},
          1);
    }//动态申请权限
  }
}


【测试】

①操作

②效果

    

【小结】

  ①这里是接收系统广播,也可以自己定义广播。以及可以添加很多功能,接收到广播进行特定的操作。

  ②广播必须添加过滤器,对特定的广播进行接收

  ③如果是接收系统广播要进行权限的申请,5.0之后一定要进行动态权限申请才可以

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

使用ViewPager实现android软件使用向导功能实现步骤

现在的大部分android软件,都是使用说明,就是第一次使用该软件时,会出现向导,可以左右滑动,然后就进入应用的主界面了,下面我们就实现这个功能
收藏 0 赞 0 分享

android在异步任务中关闭Cursor的代码方法

android在异步任务中如何关闭Cursor?在我们开发应用的时候,很多时候会遇到这种问题,下面我们就看看代码如何实现
收藏 0 赞 0 分享

Android自定义桌面功能代码实现

android自定义桌面其实很简单,看一个例子就明白了
收藏 0 赞 0 分享

android将图片转换存到数据库再从数据库读取转换成图片实现代码

有时候我们想把图片存入到数据库中,尽管这不是一种明智的选择,但有时候还是不得以会用到,下面说说将图片转换成byte[]数组存入到数据库中去,并从数据库中取出来转换成图像显示出来
收藏 0 赞 0 分享

TextView显示系统时间(时钟功能带秒针变化

用System.currentTimeMillis()可以获取系统当前的时间,我们可以开启一个线程,然后通过handler发消息,来实时的更新TextView上显示的系统时间,可以做一个时钟的功能
收藏 0 赞 0 分享

Android用ListView显示SDCard文件列表的小例子

本文简单实现了用ListView显示SDCard文件列表,目录的回退等功能暂不讨论,获取文件列表,files即为所选择目录下的所有文件列表
收藏 0 赞 0 分享

Android拦截外拨电话程序示例

这篇文章主要介绍了Android拦截外拨电话的示例,大家参考使用吧
收藏 0 赞 0 分享

通过Html网页调用本地安卓(android)app程序代码

如何使用html网页和本地app进行传递数据呢?经过研究,发现还是有方法的,总结了一下,大致有一下几种方式
收藏 0 赞 0 分享

android Textview文字监控(Textview使用方法)

以手机号充值为例,当用户输入最后一位数时候,进行汇率的变换,本文就实现类似这样的功能
收藏 0 赞 0 分享

Android ListView长按弹出菜单二种实现方式示例

这篇文章主要介绍了Android ListView长按弹出菜单的方法,大家参考实现
收藏 0 赞 0 分享
查看更多