Android广播的使用(自定义广播和本地广播)

1》自定义广播

//定义接收器public class MyBroadcastReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context,"接收我的广播",Toast.LENGTH_LONG).show();    }}
·//注册事件    <receiver        android:name=".MyBroadcastReceiver"//类名        android:enabled="true"        android:exported="true">        <intent-filter>            <action android:name="com.example.broadcasttext.MY_BROADCAST"/>广播名称        </intent-filter>    </receiver>
//定义按钮发送广播
Button button=(Button)findViewById(R.id.b1);button.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View view) {        Intent intent=new Intent("com.example.broadcasttext.MY_BROADCAST");        sendBroadcast(intent);    }});  
 
 

广播在另外的程序上进行接收,默认的发送方式是标准广播,若想发送有序广播,需要一点点修改

MainActivity.java

button.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View view) {        Intent intent=new Intent("com.example.broadcasttext.MY_BROADCAST");        sendBroadcast(intent);        sendOrderedBroadcast(intent,null);    }});

加入这一行代码后广播的接收就有了顺序

注册时候可以设置接收广播的优先级

<receiver    android:name=".MyBroadcastReceiver"    android:enabled="true"    android:exported="true">    <intent-filter android:priority="100">        <action android:name="com.example.broadcasttext.MY_BROADCAST"/>    </intent-filter></receiver>

优先接收到广播后就可以判断是否继续发送广播

public class MyBroadcastReceiver extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        Toast.makeText(context,"接收我的广播",Toast.LENGTH_LONG).show();        abortBroadcast();    }}

abortBroadcast();可以截断广播

2》本地广播

上述例子中发送的广播可以被其他程序所接受,这对安全造成了威胁,所以安卓引入了一套本地广播的体制

  MainActivity.java


package com.example.guangbo;

import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.location.LocationManager;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.net.NetworkRequest;import android.support.v4.content.LocalBroadcastManager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;

import java.nio.channels.NetworkChannel;

public class MainActivity extends AppCompatActivity {    private IntentFilter intentFilter;    private NetworkChangeReceiver networkChangeReceiver;    //本地广播    private LocalReceiver localReceiver;    private LocalBroadcastManager localBroadcastManager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //本地广播        localBroadcastManager= LocalBroadcastManager.getInstance(this);

intentFilter=new IntentFilter();        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");        networkChangeReceiver=new NetworkChangeReceiver();        registerReceiver(networkChangeReceiver,intentFilter);        Button button=(Button)findViewById(R.id.b1);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //本地广播                Intent intent=new Intent("com.example.broadcasttext.LOCAL_BROADCAST");                localBroadcastManager.sendBroadcast(intent);

}        });        //动态注册本地广播        intentFilter=new IntentFilter();        intentFilter.addAction("com.example.broadcasttext.LOCAL_BROADCAST");        localReceiver=new LocalReceiver();        localBroadcastManager.registerReceiver(localReceiver,intentFilter);    }

@Override    protected void onDestroy() {        super.onDestroy();        //本地广播        localBroadcastManager.unregisterReceiver(localReceiver);    }    class NetworkChangeReceiver extends BroadcastReceiver{            @Override            public void onReceive(Context context, Intent intent) {                ConnectivityManager connectivityManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);                NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();                if(networkInfo!=null&&networkInfo.isAvailable()){                    Toast.makeText(context,"网络可用",Toast.LENGTH_SHORT).show();                }else{                    Toast.makeText(context,"网络不可用",Toast.LENGTH_SHORT).show();                }

}    }    class LocalReceiver extends BroadcastReceiver{        @Override        public void onReceive(Context context, Intent intent) {

Toast.makeText(context,"接收本地广播",Toast.LENGTH_SHORT).show();

}    }}
 

啊本地广播主要是通过LocalBriadcaseManager来进行管理

原文地址:https://www.cnblogs.com/837634902why/p/10336320.html

时间: 2024-10-16 14:14:36

Android广播的使用(自定义广播和本地广播)的相关文章

Android四大组件——BroadcastReceiver普通广播、有序广播、拦截广播、本地广播、Sticky广播、系统广播

BroadcastReceiver普通广播.有序广播.拦截广播.本地广播.Sticky广播.系统广播 本篇文章包括以下内容: 前言 BroadcastReceiver的简介 普通广播(自定义广播) 有序广播 拦截广播 本地广播 Sticky广播 系统广播 部分源码下载 前言 又是一篇基础总结性的文章来啦,个人强迫症犯了,非得把博客的四大组件模块给补齐了,总结了一下BoradcastReceiver的各种使用,废话不多说,开车啦.博主建议自己敲一遍代码来理解广播,因为里面有很多细节的东西需要注意,

Android学习总结——本地广播机制

为了简单解决广播的安全性问题,Android引入了一套本地广播机制,使用这个机制发出的广播只能在程序的内部进行传递,只能接受来自本应用程序发出的广播.否则当我们发送一些携带关键数据的广播可能被截获,一些恶意程序也可能向我们的广播接收器中发送各种垃圾广播. 用法如下:(主要就是使用LocalBroadcastManager来对广播进行管理,并提供注册广播和发送广播的方法). package com.example.xch.localbroadcast; import android.content

Android中如何做到自定义的广播只能有指定的app接收

今天没吊事,又去面试了,具体哪家公司就不说了,因为我在之前的blog中注明了那些家公司的名字,结果人家给我私信说我泄露他们的题目,好吧,我错了...其实当我们已经在工作的时候,我们可以在空闲的时间去面一面,因为面试有很多好处的: 第一点:你知道这个公司的具体地址了,以后和朋友说的时候也是有话题的 第二点:这点很重要,看看其他公司的面试题(现在有的公司还在采用笔试题这个环节,真心无语了,题目全是从网上找的,很没有意思,所以我只要见到有笔试题的一律pass,个人感觉面到现在,阿里和滴滴还是不错的,他

【android基础篇】自定义广播和电话监听

I,自定义广播 前面所说的都是接收短信,外拨电话等都是系统所有的广播,而其实我们可以自己自定义一个广播,并且写一个广播接收者来玩玩. 1) 在按钮的点击方法中,发送自定义的广播: 1 public void click(View view){ 2 /** 3 * 发送自定义的广播 4 */ 5 Intent intent=new Intent(); 6 //设置意图的动作,要和自定义的频道要一致 7 intent.setAction("www.wangchengxiang.com");

Android 发送本地广播 以及创建广播接收器

1.创建本地广播接收器 18 public class MainActivity extends AppCompatActivity{ 19 private Button mBtn;21 private BindService.MyBinder mMyBinder; 22 private MyReceiver mMyReceiver; //创建广播接收器类变量 23 private LocalBroadcastManager mLocalBroadcastManager; //创建本地广播管理器

BroadcastReceiver广播接收者(四)——本地广播LocalBroadcastManager以及在onReceive()中弹出Dialog

MainActivity如下: package cc.cv; import android.os.Bundle; import android.support.v4.content.LocalBroadcastManager; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.app.Activity; import an

Android学习(十三) BroadcastReceiver组件(广播)

一.Broadcast(广播) 是一种广泛应用在应用程序之间传输信息的机制. 二.Broadcast(广播接收器) 是对发送出来的广播进行过滤接收并响应的一类组件,它就是用来接收来自系统和应用中的广播. 在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能:当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作:当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,

四大组件之BroadcastReceiver(一)-自定义“收音机”与发送“广播”

第1节 Broadcast Receiver概述 很多时候,我们希望一个应用程序在它没有运行起来的时候,也能感知系统状态的某些变化,如果条件合适,就让这个应用就运行起来. 比如,一个拦截骚扰电话的应用,平时它可能并不需要运行起来,它只关心有电话来的时候,看看这个号码是不是骚扰电话的号码,如果是就给用户发出一个提示,如果不是,那就和它没有关系,啥也不做. 为了实现这类功能,安卓系统引入了四大组件之一的BroadcastReceiver,设计了一套广播与接收的机制, 任何应用或者安卓系统的自身组件可

本地广播

在API21的Support v4包中新增本地广播,也就是LocalBroadcastManager.由于之前的广播都是全局的,所有应用程序都可以接收到,这样就会带来安全隐患,所以我们使用LocalBroadcastManager只发送给自己应用内的信息广播,限制在进程内使用. 它的用法很简单,只需要把调用context的sendBroadcast.registerReceiver.unregisterReceiver的地方换为LocalBroadcastManager.getInstance(