Android关于广播的静态注册和动态注册及广播数据写入界面的心得体会

Android关于广播的静态注册和动态注册及广播数据写入界面的心得体会

记得在我上学的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校的广播室的,一旦有什么重要的通知,就会播放一条广播来告知全校的师生。大家平常使用的安卓广播也有类似的机制,安卓为了让程序获得系统的状态信息,有内置的系统级广播,但是很多时候满足不了需求,所以自定义广播就使用十分广泛。下面聊聊自定义广播的两种方式

静态

静态注册是直接在AndroidManifest里面先进行注册,添加receiter,其中需要写入你的Broadcast Receiver的名字,我这里是MyReceiver,也可以写其他的名字,enabled和exported都设置成true;这些都会默认生成,根据自己的需要更改,自己要手动生成的就是intent-filter,添加action,写入action的名字(你自己及定义的什么名字就用什么名字,公司为了区分开都是用com.xxx.cn),添加权限uses-permission

在这里插入图片描述
在这里插入图片描述

动态

动态注册广播是在活动中,我这里先在布局新建了一个按钮,在活动中初始化自己的广播,设置action的名字,然后设置按钮点击事件,利用Intent intent=new Intent();设置action的名字,我这里设置的是不规范的,我就随意些了一个名字,然后sendBroadcast(intent);进行发送广播,要注意两点:1、要把广播设置成全局变量private MyReceiver myReceiver;2、动态注册的广播要用onDestroy进行关闭
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

动态和静态使用后的心得体会

动态的比较灵活,注册在活动中开启和关闭可自由掌握,静态的相对来说比较直接,就在Manifest里面注册,然后哪里要用直接声明action就可以使用,但是安卓8.0以后的静态注册大部分被取消了,这就有点坑了,看来还是希望代码可以灵活运用,去使用动态注册

关于动态注册广播并把广播中的数据记录到界面中

在广播中:

根据上面的动态注册进行添加,先添加一个接口作为代理,我这里为了简介明了直接使用拼音缩写DL,代理是为了写入数据所以在里面添加不返回值的方法void xr(String s);写入数据以后要将自己带着数据传送去到达的界面,写一个传送的方法将代理传进去,最后写入要传输的数据dl.xr(s);

在这里插入图片描述

在活动中:

首先要添加实现广播的接口implements MyReceiver.DL,既然是要记录数据,那应该记录在哪里呢,我这里在布局文件中添加了一个TextView,并在活动中设置为私有的全局变量,然后实现传送到这个界面的方法myReceiver.CS(this);最后将数据写入TextView中

     public class MainActivity extends AppCompatActivity implements MyReceiver.DL{
private MyReceiver myReceiver;
private  TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myReceiver=new MyReceiver();
    IntentFilter intentFilter=new IntentFilter("CCTV_1");
    registerReceiver(myReceiver,intentFilter);

    myReceiver.CS(this);
   tv=findViewById(R.id.textView);


    Button button=findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent("CCTV_1");
            intent.putExtra("s","呆呆兽");
            sendBroadcast(intent);
        }
    });
}

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(myReceiver);
}
@Override
public void xr(String s) {
    tv.setText(s);
}
}

很多脚本会在传送数据的过程截取数据,但是现在也有很多反脚本程序防止恶意的窃取数据。
第一次发博客,刚学android技术小白,理解不深,写的不好,会有很多错误,还需向前辈多多学习,真诚地希望大佬们不吝赐教,感谢。
在此要感谢我的老师金庭波,讲课通俗易懂,耐心教导了我们,让我在为人做事方面都有所收获。https://me.csdn.net/jintingbo

发布了1 篇原创文章 · 获赞 0 · 访问量 110

猜你喜欢

转载自blog.csdn.net/zc_0107/article/details/105267643
今日推荐