android开发之broadcast学习笔记

举报
江南一点雨 发表于 2021/08/16 23:38:42 2021/08/16
1.7k+ 0 0
【摘要】 android中的广播用的太多了,今天稍微总结一下。 按注册方式分为两种: 1.静态注册广播: 静态注册广播就是在androidManifest.xml文件中注册广播,假设我们要实现这样一个效果,在一个activity上点击按钮,发送一条广播,这条广播弹出一个toast,显示“静态”二字。 先看看广播接受者: public class MyBroadc...

android中的广播用的太多了,今天稍微总结一下。
按注册方式分为两种:


1.静态注册广播:
静态注册广播就是在androidManifest.xml文件中注册广播,假设我们要实现这样一个效果,在一个activity上点击按钮,发送一条广播,这条广播弹出一个toast,显示“静态”二字。


先看看广播接受者:

public class MyBroadcast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"静态", Toast.LENGTH_LONG).show(); }

}

  
 

清单文件中注册:

 <receiver android:name="com.example.staticbroadcast.MyBroadcast" > <intent-filter> <action android:name="com.test.StaticBroadcast" /> </intent-filter> </receiver>
  
 

activity中的点击事件(发送广播):

 this.static_btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setAction("com.test.StaticBroadcast"); sendBroadcast(intent); } });
  
 

2.动态注册。
动态注册一般是在activity中的onStart()方法中注册,在onStop()方法中解除注册,代码如下:

public class MainActivity extends Activity { private Button static_btn; private Button dynamic_btn; private BroadcastReceiver myBroadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.static_btn = (Button) this.findViewById(R.id.button1); this.dynamic_btn = (Button) this.findViewById(R.id.Button01); myBroadcastReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(MainActivity.this,"你好,这里是动态广播!", Toast.LENGTH_LONG).show(); } };

// this.static_btn.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View v) {
// Intent intent = new Intent();
// intent.setAction("com.test.StaticBroadcast");
// sendBroadcast(intent);
// }
// }); this.dynamic_btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //发送广播 Intent intent = new Intent(); intent.setAction("DynamicBroadcast"); sendBroadcast(intent); } }); } @Override protected void onStart() { super.onStart(); //注册广播 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("DynamicBroadcast"); registerReceiver(myBroadcastReceiver, intentFilter); } @Override protected void onStop() { super.onStop(); //取消注册 unregisterReceiver(myBroadcastReceiver); }
}
  
 

关于静态注册的细节:
android:exported=”true”这个属性表示该广播接收器是否接收来自其他App发出的广播,如果有intent-filter属性,则默认为true,否则默认为false。


每个广播接收者都可以接受多个广播源,如果是静态注册,那么你要这么做:

 <receiver android:exported="true" android:name="com.example.staticbroadcast.MyBroadcast" > <intent-filter> <action android:name="com.test.StaticBroadcast" /> <action android:name="com.test.StaticBroadcast2"/> </intent-filter> </receiver>
  
 

在广播接收器中这样处理:

 @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("com.test.StaticBroadcast")) { Toast.makeText(context, "静态", Toast.LENGTH_SHORT).show(); } else if (intent.getAction().equals("com.test.StaticBroadcast2")) { Toast.makeText(context, "静态2", Toast.LENGTH_SHORT).show(); } }
  
 

如果是动态注册,注册方式如下:

 @Override protected void onStart() { super.onStart(); //注册广播 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("DynamicBroadcast"); intentFilter.addAction("DynamicBroadcast2"); registerReceiver(myBroadcastReceiver, intentFilter); }
  
 

广播接收器中的处理方式与静态注册一致。


关于怎样使用broadcast实现activity和fragment之间的通信可以查看我的另一篇博客使用Broadcast实现android组件之间的通信

本文参考了:http://www.cnblogs.com/lwbqqyumidi/p/4168017.html

文章来源: wangsong.blog.csdn.net,作者:_江南一点雨,版权归原作者所有,如需转载,请联系作者。

原文链接:wangsong.blog.csdn.net/article/details/46955787

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。