Android 自定义广播(无序广播) BroadcastReceiver广播接受者(静态、动态)
来源:互联网 发布:网络不稳定怎么办 编辑:程序博客网 时间:2024/05/22 03:07
什么是广播
- 它是Android四大组件之一
- 一种全局的监听器,用来监听系统全局的广播消息
- 系统的大部分消息都以广播的形式发布,比如开机文成的消息。接受到短信的消息,打进打出电话的消息。
- Android系统每次启动完成会向外广播一条消息,告诉所有的组件启动完成了,只有继承了Broadcast的类才能捕捉到这些系统消息,然后,你可以,拿它实现你的需求。
广播比喻
- 比如,现实社会中的,电视台广播,它通过特殊的频率发送他们的信息,而我们用户,只有把频率调成和电视台一样,才可以接受到电视台的信息。
无序广播
没有指定接受者顺序,所有的控件均可接受,先后顺序不定。
建立广播发送者
广播发送,还有一种,过时的,粘性广播发送,故名思意,就是说,广播发送了,但是在程序没有打开时(静态接受者模式),接受不到广播
,一旦打开程序,程序就会马上接受到广播 ,粘性广播,必须配置,其它不用。
//打开广播发送者的 AndroidManifest.xml<!--设置,粘性广播发送者的权限--> <uses-permission android:name="android.permission.BROADCAST_STICKY"></uses-permission>
xml 文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.broadcastsender.MainActivity"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/et_mian_test" android:hint="需要广播的内容" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="bt_mian_test" android:text="广播" /></LinearLayout>
- 广播发送者 Java 代码
package com.example.broadcastsender;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.EditText;public class MainActivity extends AppCompatActivity { private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //取到,要广播控件 editText = (EditText) findViewById(R.id.et_mian_test); } //测试使用的, 开始广播,按钮点击事件 public void bt_mian_test(View view){ //建立无序广播 Intent intent=new Intent(); //给广播设定名字,即是特定的(频率),必须唯一 //推荐使用类名+包名 intent.setAction("com.example.broadcastsender.MainActivity"); //设置广播发送的内容,参数一为:键 参数二: 值,可以发送八大基本数据类型,及引用类型 intent.putExtra("sendBroadcast",editText.getText().toString()); Log.i("test","广播发送了————"+editText.getText()); //发送普通广播 // sendBroadcast(intent); //发送粘性广播(粘性必须配置) sendStickyBroadcast(intent); }}
广播接受者
当有多个接受者时,接受的顺序,那个接受者先打开程序,就先接受。接受者分二种,一种通过xml配置的静态广播,一种是通过Java代码实现的动态广播。
* 静态广播(通过xml配置实现)*
广播接受者,必须,要配置接受,否者无法接受到广播,打开程序的AndroidManifest.xml 在 节点内添加,广播配置。广播接受,在不打开的情况下,也能接受到,广播。
<!-- 配置广播接受者,在本配置文件内配置 --> <receiver android:name=".ReceiveTwo"> <!--广播过滤器--> <intent-filter> <!--接受的广播 名(频率)--> <action android:name="com.example.broadcastsender.MainActivity"></action> </intent-filter> </receiver>
动态广播(通过JAVA实现)
在Activity 中,在启动或者恢复,时注册广播接受者,在Activity销毁时,注销广播接受者,动态广播,由于在Acitivity销毁时,就销毁了广播接受,故此,在应用关闭状态下是无法接受到广播的。
package com.example.broadcastreceiveone;import android.content.IntentFilter;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class BroadcastReceiveOne extends AppCompatActivity { private IntentFilter intentFilter; private ReceiveonOne receiveonOne; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_broadcast_receive_one); //动态 接受者,就是用Java代码 设置接受者 //建立接受者对象 receiveonOne = new ReceiveonOne(); //建立广播 过滤器 intentFilter = new IntentFilter(); //设置,接受的广播 名(频率) intentFilter.addAction("com.example.broadcastsender.MainActivity"); } //在Activity启动或者重新启动时 @Override protected void onResume() { super.onResume(); //注册广播接受者 ,参数一 广播接受类对象 参数二 广播过滤器 registerReceiver(receiveonOne,intentFilter); } //在Activity 关闭时,注销广播接受者 @Override protected void onDestroy() { super.onDestroy(); //注销广播, 参数填,被注销的广播 unregisterReceiver(receiveonOne); }}
广播接受者Java 代码
建立一个类,继承BroadcastReceiv
package com.example.broadcastreceivetwo;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class ReceiveTwo extends BroadcastReceiver { //建立一个类,继承广播接受者(BroadcastReceiver)类, //重写接受广播方法 @Override public void onReceive(Context context, Intent intent) { //取到广播,的名字(频率) String acton=intent.getAction(); //判断,如果是我指定的广播 if("com.example.broadcastsender.MainActivity".equals(acton)){ //取到,此广播的内容,参数是,广播发送者,设定发送值时的键 String broadcastValue=intent.getStringExtra("sendBroadcast"); //我,打印出接受到广播的值 Log.i("test","我是Two"+broadcastValue); } }}
阅读全文
0 0
- Android 自定义广播(无序广播) BroadcastReceiver广播接受者(静态、动态)
- Android之广播接受者(无序广播)
- Android BroadcastReceiver实现自定义静态广播和动态广播(黏性广播)
- android广播接受者broadcastReceiver
- Android-广播BroadcastReceiver-自定义广播接受者和发送者
- Android自定义广播发送者和接受者(动态-静态-黏性)
- Android广播接受者BroadcastReceiver详解
- Android进阶之路 - BroadcaseReceiver(自定义广播、有序广播、无序广播、广播拦截、动态注册、静态注册)的详细使用方式
- Android BroadcastReceiver之自定义无序、有序广播
- Android之BroadcastReceiver 广播接受者(短信窃听实例)
- 广播接受者broadcastreceiver
- Android自定义广播(动态、静态)
- Android中广播的使用(动态、静态注册的区别,有序无序广播的使用)
- Android广播(BroadcastReceiver)
- 四大组件之BroadCastReceiver(无序广播和有序广播)
- 4.1.3.3 Android 网络状态监听的静态广播接受者和动态广播接受者Broadcast-Receiver
- Android之BroadcastReceiver(广播接受者)详解
- Android 四大组件之BroadcastReceiver(发送有序无序广播)
- {"errcode":40054,"errmsg":"invalid sub button url domain hint: [WWA480339vr20]的解决办法
- 深夜聊一波栈内存和堆内存的区别
- 运算放大器,晶体管(三极管),LM317
- java连接mysql调试过程
- 开发笔记,长期更新~
- Android 自定义广播(无序广播) BroadcastReceiver广播接受者(静态、动态)
- Python学习笔记(十)——面向对象
- 防止UIButton重复点击
- MySQL主从复制部署(windows)
- redis 秒杀抢购demo
- 学以致用——Excel连接Oracle生成iKB报告——Part2(Excel日报自动化的数据转换及用户界面)
- [js项目]JavaScript库
- 玩的就是基础
- LibreOJ 515 贪心只能过样例(dp[bitset优化])