初学安卓的踩过的坑和心得体会(三)——Broadcast Receiver
2018-01-09 19:45
169 查看
一、广播接收器基本传值
首先我们要知道Broadcast Receiver是一个低效的广播,在需要频繁使用或者数据量很大的时候不建议使用,否则会导致程序运行缓慢。Broadcast Reveicer的声明注册同Activity一样,先在mainActivity的同级目录下新建一个java类,然后到Androidmanifest中声明即可。
在新建Broadcast Receiver 之后会有一个方法onReveicer(),我们在期中打印一句话“onReveicer”。
public class BroadcastReveicer extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { System.out.println("onReceiver"); } }
在xml文件中新建一个按钮,并且回到主类进行声明,给按钮一个监听器,监听器里面直接调用sendBroadcastReveicer方法即可。
接着在MainActivity类中绑定一个单击事件,由于本类继承了Activity所以可以直接调用sendBroadcast方法然后进行广播接收。
public class MainActivity extends AppCompatActivity { private Button butReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); butReceiver=findViewById(R.id.button); butReceiver.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { sendBroadcast(new Intent(MainActivity.this, BroadcastReceiver.class)); } }); } }我们将intent提出来,将文本放入其中就可以实现传递值的操作
public class MainActivity extends AppCompatActivity { private Button butReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); butReceiver=findViewById(R.id.button); butReceiver.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent i=new Intent(MainActivity.this, BroadcastReceiver.class); i.putExtra("name","value"); sendBroadcast(i); } }); } }回到BroadcastReceiver获取值
public class BroadcastReveicer extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { System.out.println("onReceiver"+intent.getStringExtra("name")); } }
先回到andriodmanifest中删除掉刚刚注册的Receiver语句
<receiver android:name=".BroadcastReveicer"></receiver>
接着在mainActivity中新建两个按钮,分别是注册和注销,然后分别加上两个监听器
public class MainActivity extends AppCompatActivity { private Button butReceiver,zhuce,zhuxiao; private final BroadcastReceiver2 mybc=new BroadcastReceiver2(); protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); butReceiver=findViewById(R.id.button); zhuce=findViewById(R.id.zhuce); zhuce.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { registerReceiver(mybc,new IntentFilter(BroadcastReceiver2.action)); } }); zhuxiao=findViewById(R.id.zhuxiao); zhuxiao.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { unregisterReceiver(mybc); } }); butReceiver.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent i=new Intent(BroadcastReceiver2.action); i.putExtra("name","value"); sendBroadcast(i); } }); } }
我们将intent的构造方法也换为使用action的而在broadcast中也新增了一个变量,作为寻址使用,只要监听器寻找这个地址,就可以建立连接。
public class BroadcastReceiver2 extends BroadcastReceiver { public static final String action="com.example.koogllz.myBroadcastReceiver.intent.action.BroadcastReceiver"; public void onReceive(Context context, Intent intent) { System.out.println("onReceiver"+intent.getStringExtra("name")); } }我们运行之后发现在注册之后才能进行广播,否则不可以,在注销之后也是同样不能广播。
三、总结
在命名的时候一定要符合规范并且无误,今天因为打反字母顺序导致一个bug卡了半天,耽误了很多时间。要记住一些方法名字,尽量能够手敲而不是用编译器。
相关文章推荐
- 初学安卓的踩过的坑和心得体会(一)——Activity
- 初学安卓踩过的坑和心得体会(二)——Service
- 安卓开发的心得体会
- 初学函数心得体会
- 初学Hibernate心得体会
- 初学Git的一些心得体会
- 安卓开发学习心得-------欢迎界面的心得体会
- (一)Croda 初学 心得 体会
- 关于安卓实训(打飞机游戏)的心得体会
- Python初学心得体会
- JSP初学心得(转载)
- 关于javascript事件总结和自己的心得体会
- 关于互联网架构设计的心得与体会
- 魔兽争霸war3心得体会(四):不死族vs人族1本火魔塔
- 数据库学习及心得体会
- java 3年,最近在天津和北京面试的一些心得体会,简单zookeeper dubbo spring搭建(基础推荐)
- 项目管理心得:一个项目经理的个人体会、经验总结
- 关于通过ODBC访问NOTES的心得体会
- 数据结构学习心得体会