通知与广播,BroadcastReceiver接收收到短信的广播

意气风发、知识介绍

Notification:

来得在手提式有线话机状态栏的打招呼。Notification所表示的是意气风发种具有全局意义的公告,程序日常通过NotificationManager服务来发送Notification。

Android3.0日增了Notification.Builder类,该类能够轻易地开创Notification对象。

Notification,俗称文告,是意气风发种具有全局意义的关照,它突显在显示屏的上边,首先会显现为一个Logo的款式,当顾客向下滑动的时候,展现出通告具体的源委。

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

注意:

1,因为部分Android版本的包容性难题,对于Notification来说,Android3.0是多少个山岭,借使不思索向下宽容的主题材料,构建Notification使用Notification.Builder营造,假如诬捏到向下包容性的题目,日常推荐应用NotificationCompat.Builder创设(NotificationCompat类在v4:android.support.v4.app.NotificationCompat)。

2,在实际上利用进程中,平日不会一向营造Notification对象,而是采取它的二个内部类NotificationCompat.Builder来实例化叁个目的(Android3.0之下使用Notification.Builder),并设置布告的各样品质,最终通过NotificationCompat.Builder.build(卡塔尔国方法获得一个Notification对象。当获得那一个指标之后,能够动用NotificationManager.notify(卡塔尔(قطر‎方法发送通告,可由此Activity.getSystemService(String卡塔尔(قطر‎方法赢得NotificationManager对象,Activity.getSystemService(String卡塔尔(قطر‎方法可以通过Android系统级服务的句柄,重临对应的靶子。在那须要再次回到NotificationManager,所以直接传送Context.NOTIFICATION_SERVICE。
——————————————————————————————————————————
(二)、Notification.Builder类中提供的形式:
builder.setAutoCancel(卡塔尔国; 设置点击布告后,状态栏自动删除通告。
builder.setSmallIcon(凯雷德.drawable.alert卡塔尔(قطر‎; 设置文告小Logo 必得设置
builder.setLargeIcon(Porsche718.drawable.alert2卡塔尔国; 设置布告大Logo
builder.setContentTitle(“标题”卡塔尔国; 设置文告标题 必需设置
builder.setContentText(“文本”卡塔尔(قطر‎; 设置文告内容 必需安装
builder.setDefaults(Notification.DEFAULT_ALL);
设置私下认可的通告音乐、振动、LED等。
builder.setSound(uri卡塔尔(英语:State of Qatar); 设置布告的音乐
builder.setTicker(卡塔尔(英语:State of Qatar);
设置通告在状态栏的唤起文本。第三回提示音信的时候显得在通知栏上。
builder.setContentIntent(卡塔尔(قطر‎;
设置点击布告后将要运行的次序组件对应的PendingIntent。

  2、Android中放到了成百上千系统级其他播放,能够在应用程序中收获各样系统的情况消息。

晋级方法:

builder.setVibrate(new long[ ]卡塔尔;
按long数组4个参数设置手提式无线电话机激动频次,央求权限
builder.setLights(int(color类颜色字段),int,int卡塔尔(英语:State of Qatar);设置LED灯闪烁颜色和间距

builder.setStyle(new NotificationCompat对象);
new
NotificationCompat的点子除了获得Notification对象,也可能够允许大家设置通告的长文本和大图片格式

大图片方法:BigPictureStyle(卡塔尔国.bigPicture( Bitmap对象卡塔尔(قطر‎;
Bitmap对象必要通过图形解码类BitmapFactory.decodeResource(getResources(卡塔尔,图片对象卡塔尔(قطر‎;获取

长文本方式:BigTextStyle(卡塔尔国.bigText(String对象);

builder.setPriority(PRORITY_MAX/PRORITY_HIGH/PRORITY_LOW/PRORITY_MIN);设置公告优先级

  3、使用意况:

安装点击文告后的打消方法:

1.选取builder.setAutoCancel(卡塔尔(قطر‎; 设置点击通告后,状态栏自动删除布告
2.在通知运营的移动中调用manager.cancel(id)打消,id为notify(id,Notification对象)时登记的id
——————————————————————————————————————————

  ①当手机未有电时,会报告顾客“电量低”的播音讯息。能够成功正在利用的app就能够接纳到那一个广播音讯,若是是玩玩或然是一得之见保存数据,如若是正在使用的做事软件,只怕提示接上电源。

Broadcast:

广播采取器,也被称呼全局事件,或连串事件。
当Android系统中此外程序有动作时,如果想文告任何程序,接受广播的章程实行传播是极度管用的。广播从理论上说,能够将一个动作传播给自由三个程序(当然,广播接纳器的数据会吸收接纳系统节制)。

系统形成一定的动作,就能够自行发出广播,它只担当“说”而不论是你“听不听”,也便是随意您选择方如哪管理。

  【提示】对于某某程序来讲,可以筛选选取那风姿罗曼蒂克消息也得以选拔不选用那个音信。

播音的门类:

1卡塔尔.Normal 布罗兹cast:普通广播

这里将普通广播界定为:开辟者自个儿定义的intent,以context.send布罗兹cast_”AsUser”(intent,
…卡塔尔情势。具体能够运用的办法有:
sendBroadcast(intent)/sendBroadcast(intent,
receiverPermission)/sendBroadcastAsUser(intent,
userHandler)/sendBroadcastAsUser(intent,
userHandler,receiverPermission)。
万般广播会被登记了的照拂的感兴趣(intent-filter相配)接纳,且顺序是冬日的。要是发送广播时有相应的权限要求,BroadCastReceiver要是想要接收此广播,也急需有对应的权杖。

2卡塔尔.System 布罗兹cast: 系统广播

Android系统中存放了七个体系广播,只要提到到手机的基本操作,基本上都会生出相应的系统广播。如:开启运转,网络状态改换,拍照,荧屏关闭与开启,点亮不足等等。每一个系统广播都具备一定的intent-filter,个中第一归纳实际的action,系统广播发出后,将被相应的布罗兹castReceiver接纳。系统广播在系统之中当特定事件发生时,有系统活动发出。

3卡塔尔(قطر‎.Local 布罗兹cast:本地广播
由此getInstance(卡塔尔(英语:State of Qatar)方法获得Local布罗兹castManager类的实例并举行发送与登记。
本地广播不能够透过静态注册接收。
性质:保密性,安全性,高效性。

4卡塔尔(قطر‎.Ordered broadcast:有序广播

以不改变应万变广播的稳步广播中的“有序”是指向性广播接受者来说的,指的是出殡和下葬出去的广播被BroadcastReceiver根据程序循序选用。有序广播的概念进程与普通广播没有差别,只是其的首要发送方式成为:sendOrderedBroadcast(intent,
receiverPermission, …卡塔尔国。

对此有序广播,其首要特点计算如下:

1>多少个具当前早就注册且实用的布RhodescastReceiver选拔有序广播时,是比照先后顺序采纳的,前后相继顺序判别规范依照为:将眼下系统中兼有有效的动态注册和静态注册的布罗兹castReceiver根据priority属性值从大到小排序,对于有着同等的priority的动态播放和静态广播,动态广播会排在前边。

2>先吸取的BroadcastReceiver能够对此有序广播进行截断,使后边的布罗兹castReceiver不再选择到此广播,也可以对播音举办改换,使后边的BroadcastReceiver采纳到广播后解析获得错误的参数值。当然,经常景色下,不建议对有序广播实行此类操作,特别是指向系统中的有序广播。

  ②手提式有线电话机的storage相当不够了,提醒您清理空间,否则应用程序将变慢也许不能够使用。

播音的登记:

1、静态注册:
静态注册形式是在AndroidManifest.xml的application里面定义receiver并用<intent-filter>标签设置过滤器,接受钦定action广播。。
一经在项目清单配置文件中配备了播音采取器,那么程序在装置后会自动注册广播接纳器。
静态注册方式的个性:不管该应用程序是或不是处于活动状态,都会开展监听。

新创立接受器class文件三番若干遍及罗兹castReceiver的类,重写onReceiver方法,并在onReceiver方法中对播音进行管理。
当产生了AndroidManifest.xml中对应事件,就调用当前播发的onReceiver方法。

2、动态注册:
措施是在同三个activity里面新创设内部class世襲布罗兹castReceiver的类,并调用当前上下文对象的registerReceiver(卡塔尔(قطر‎方法来注册,和静态的内容多数。多少个形参是receiver对象,另二个是IntentFilter对象。而IntentFilter布局方法的参数是要选拔的action。
动态注册方式特点:在代码中进行注册后,当应用程序关闭后,就不再举行监听。

动态注册广播选拔器的表征,正是当用来注册的 Activity
关掉后,广播也就失效了。同有的时候间反映了静态注册的三个优势,便是无需忧郁广播选拔器是还是不是被关闭,只要设备是张开状态,广播采纳器正是展开着的。

//创建自己的接收器
MyReceiver receiver = new MyReceiver();
//创建过滤器,并指定action,使之用于接收同action的广播
IntentFilter filter = new IntentFilter("android.intent.action.PHONE_STATE");
//或者:
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.PHONE_STATE");
filter.setPriority(999);
registerReceiver(receiver, filter);//接收器与通知事件注册

  ③手提式有线电电话机豆蔻梢头开机,某某程序就机关运维,QQ、Wechat都是开机自启。

出殡及选取自定义广播:

接收:
始建本人的采纳器世袭布罗兹castReceiver的类并动态or静态注册,在onReceiver方法中拍卖具体逻辑。

发送:

// 指定广播目标Action
Intent intent = new Intent("MyReceiver_Action");
//此字段与接收器注册的字段匹配一致则调用其onReceiver方法
// 可通过Intent携带消息
intent.putExtra("msg", "发送广播");
// 发送广播消息
sendBroadcast(intent);

  4、一个顺序发出广播消息,一个前后相继选取播放音信,所以致少要求2个程序手艺成就一发意气风发收。发的一方,叫广播发送方;收的一方,叫广播选用者。

注销BroadcastReceiver:

1、一般在onStart中注册BroadcastReceiver,在onStop中取消BroadcastReceiver。
2、一个BroadcastReceiver 对象只有在被调用onReceive(Context,
Intent卡塔尔时才使得,当从该措施重返后,该目的就没用的了,甘休生命周期。

//动态注册的播报要铭记在activity的onDestroy回调方法中打消广播选取器
unregisterReceiver(receiver);
——————————————————————————————————————————
【广播系统大全及实例样板】:http://blog.csdn.net/zhangzhen\_v/article/details/51697330
【种种广播详细解释及版本变迁】:http://www.cnblogs.com/lwbqqyumidi/p/4168017.html

  5、广播选取者须求打开挂号。动态注册,静态注册(在AndroidManiFest文件中)  

二、项目实践

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

  ②拓宽登记,增多过滤器 intent-filter,选用特定的广播

  ③重写onReceiver方法,假设试行,代表曾经收到到广播

  ④定义收到音讯播报采纳者,归属系统广播,则供给申请权限(静态,动态)

【项目结构】

图片 1

【提醒】创制Receiver能够通过以下办法
    此方法会自动在AndroidManifest中张开注册receiver,然则须求摄取固定的播音,仍需增多intent-filter

图片 2

图片 3

 【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);
    }//动态申请权限
  }
}

【测试】

①操作

图片 4

②效果

    图片 5

【小结】

  ①这里是接到系统广播,也得以本身定义广播。以至能够增添超多成效,接受到广播进行一定的操作。

  ②广播必得增加过滤器,对特定的播音进行吸取

  ③举例是选取系统广播要开展权力的提请,5.0事后自然要拓宽动态权限申请才足以

以上就是本文的全部内容,希望对我们的上学抱有利于,也盼望大家多多点拨脚本之家。

您或然感兴趣的稿子:

  • Android
    布罗兹castReceiver完毕网络状态实时监听
  • Android运用布罗兹castReceiver完结强迫下线
  • Android
    布罗兹castReceiver广播注册情势计算
  • android之BroadcastReceiver应用详细解释
  • 深远Android中布罗兹castReceiver的三种注册形式(静态和动态)详细明白
  • Android
    布罗兹castReceiver经常见到监听收拾
  • Android
    布罗兹castReceiver广播机制概述
  • Android采纳布罗兹castReceiver情势自动拿到验证码
  • 详解Android中BroadCastReceiver组件
  • Android使用布RhodescastReceiver监听互连网连接状态的变动

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注